В книге Python в двух словах (2-е издание) есть пример, который использует
старые классы стиля, чтобы продемонстрировать, как методы решаются в классическом порядке разрешения и
как это отличается от нового порядка.
Я попробовал такой же пример, переписав пример в новом стиле, но результат не отличается от того, что было получено в классах старого стиля. Версия python, используемая для запуска примера, 2.5.2. Ниже приведен пример:
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__
Вызов instance.amethod()
выводит Base1
, но в соответствии с моим пониманием MRO с новым стилем классов вывод должен быть Base3
. Вызов Derived.__mro__
печатает:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
Я не уверен, что мое понимание MRO с новыми классами стиля неверно или что я делаю глупую ошибку, которую я не могу обнаружить. Пожалуйста, помогите мне лучше понять MRO.