2

私はEffective Pythonの本を読んでいて、次のコードを見つけました

class MyBaseClass(object):
    def __init__(self, value):
        self.value = value
        print "I changed it   to MyBaseClass",self.value

class TimesFiveCorrect(MyBaseClass):
    def __init__(self, value):
        super(TimesFiveCorrect, self).__init__(value)
        self.value *= 5
        print "I changed it   to TimesFiveCorrect ",self.value

class PlusTwoCorrect(MyBaseClass):
    def __init__(self, value):
        super(PlusTwoCorrect, self).__init__(value)
        self.value += 2
        print "I changed it   to PlusTwoCorrect ",self.value

class Factor(TimesFiveCorrect, PlusTwoCorrect):
    def  __init__(self, value):
        super(Factor, self).__init__(value)
        print "I changed it   to Factor ",self.value

foo = Factor(5)
from pprint import  pprint
pprint(Factor.mro())

私が予想していた foo の値は27( 5 * 5 + 2) です。しかし、それはであることが判明しました35。そして、出力は次のとおりです

I changed it   to MyBaseClass 5
I changed it   to PlusTwoCorrect  7
I changed it   to TimesFiveCorrect  35
I changed it   to Factor  35
[<class '__main__.Factor'>,
 <class '__main__.TimesFiveCorrect'>,
 <class '__main__.PlusTwoCorrect'>,
 <class '__main__.MyBaseClass'>,
 <type 'object'>]

MRO は理解できましたが、実行順序がわかりませんでした...TimesFiveCorrect最初に呼び出されるべきではないですか?

4

1 に答える 1