W książce Python w pigułce (wydanie drugie) znajduje się przykład, który wykorzystuje
klasy w starym stylu, aby zademonstrować, jak metody są rozwiązywane w klasycznej kolejności rozwiązywania i
jak to jest inaczej z nowym zamówieniem.
Próbowałem tego samego przykładu, przepisując go w nowym stylu, ale wynik nie różni się od tego, który uzyskano z klasami w starym stylu. Wersja Pythona, której używam do uruchomienia przykładu, to 2.5.2. Poniżej znajduje się 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 instancja = Derived() instance.amethod() print Derived.__mro__
Wywołanie instance.amethod()
wyświetla Base1
, ale zgodnie z moim rozumieniem MRO z nowy styl klas wynik powinien być Base3
. Wywołanie Derived.__mro__
wyświetla:
(<class "__main__.Derived">, <class "__main__.Base2">, <class "__main__.Base1">, <class "__main__.Base3">, <type "object">)
Nie jestem pewien, czy moje zrozumienie MRO z nowym zajęcia stylu są niepoprawne lub popełniam głupi błąd, którego nie jestem w stanie wykryć. Pomóż mi lepiej zrozumieć MRO.