In dem Buch Python in a Nutshell (2. Ausgabe) gibt es ein Beispiel, das
alte Stilklassen verwendet, um zu demonstrieren, wie Methoden in klassischer Auflösungsreihenfolge aufgelöst werden und
wie sie sich von der neuen Reihenfolge unterscheiden.
Ich habe das gleiche Beispiel versucht, indem ich das Beispiel in einem neuen Stil umgeschrieben habe, aber das Ergebnis unterscheidet sich nicht von dem, was mit alten Stilklassen erzielt wurde. Die Python-Version, mit der ich das Beispiel ausführe, ist 2.5.2. Unten ist das Beispiel:
class Base1(object):
def amethod(self): print "Base1"
class Base2(Base1):
pass
class Base3(object):
def amethod(self): print "Base3"
class Derived(Base2,Base3):
pass
instance = Derived()
instance.amethod()
print Derived.__mro__
Der Aufruf wird instance.amethod()
gedruckt Base1
, aber nach meinem Verständnis des MRO mit neuem Klassenstil sollte die Ausgabe gewesen sein Base3
. Der Anruf wird Derived.__mro__
gedruckt:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
Ich bin mir nicht sicher, ob mein Verständnis von MRO mit neuen Stilklassen falsch ist oder ob ich einen dummen Fehler mache, den ich nicht erkennen kann. Bitte helfen Sie mir beim besseren Verständnis von MRO.