У книзі Python in arathell (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 з новими класами стилів є неправильним, чи я роблю дурну помилку, яку не можу виявити. Будь ласка, допоможіть мені краще зрозуміти МРО.