Ich wollte durch effektiven Python Buch, und ich fand den folllowing CodeWie wird die Ausführungsreihenfolge festgelegt, wenn die mehrfache Vererbung mit der neuen Stilklasse verwendet wird?
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())
Was ich den Wert von foo erwartet 27
(5 * 5 + 2
) wäre. Aber es stellt sich heraus, 35
zu sein. Und die Ausgabe folgt
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'>]
ich die MRO verstehen konnte, aber ich habe nicht die Ausführung Bestellung erhalten ... Sollte TimesFiveCorrect
nicht zuerst genannt werden?
Mögliches Duplikat von [Wie funktioniert Pythons super() mit Mehrfachvererbung?] (Http://stackoverflow.com/questions/3277367/how-does-pythons-super-work-with-multiple-herheritance) – Hooting