В книге « 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.