W książce Python in a Nutshell (2nd Edition) znajduje się przykład, który używa
klas starego stylu, aby zademonstrować, w jaki sposób metody są rozwiązywane w klasycznej kolejności i
czym różni się od nowej kolejności.
Wypróbowałem ten sam przykład, przepisując przykład w nowym stylu, ale wynik nie różni się od tego, co uzyskano przy użyciu klas starego stylu. Wersja języka Python, której używam do uruchomienia przykładu, to 2.5.2. Poniżej przykład:
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__
Wywołanie jest instance.amethod()
drukowane Base1
, ale zgodnie z moim zrozumieniem MRO z nowym stylem klas wynik powinien być Base3
. Wezwanie Derived.__mro__
drukuje:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
Nie jestem pewien, czy moje rozumienie MRO z klasami nowych stylów jest niepoprawne, czy też popełniam głupi błąd, którego nie jestem w stanie wykryć. Proszę, pomóż mi w lepszym zrozumieniu MRO.