В книге Python in a Nutshell (2nd Edition) есть пример, в котором используются
классы старого стиля, чтобы продемонстрировать, как методы разрешаются в классическом порядке разрешения и
как это происходит. отличается от нового порядка.
Я попробовал тот же пример, переписав пример в новом стиле, но результат ничем не отличается от того, что было получено с классами в старом стиле. Версия Python, которую я использую для запуска примера, — 2.5.2. Ниже приведен пример:
class Base1(object): def amethod(self): print Класс "Base1" Base2(Base1): передать класс Base3(объект): def amethod(self): напечатать класс "Base3" Производный(Base2,Base3): передать instance = Derived() instance.amethod() напечатать Derived.__mro__
Вызов instance.amethod()
печатает Base1
, но согласно моему пониманию MRO с новый стиль классов вывод должен был быть Base3
. Вызов Derived.__mro__
выводит:
(<class "__main__.Derived">, <class "__main__.Base2">, <class "__main__.Base1">, <class "__main__.Base3">, <type "object">)
Я не уверен, правильно ли я понимаю MRO с новыми классы стиля неверны или что я делаю глупую ошибку, которую не могу обнаружить. Пожалуйста, помогите мне лучше понять MRO.