新しいスタイルのクラスのメソッド解決順序(MRO)?

| | | | | |

Pythonin a Nutshell(2nd Edition)には、古いスタイルのクラスを使用して、メソッドが従来の解決順序でどのように解決されるか、および
どのように解決されるかを示す例があります。新しい注文とは異なります。

同じ例を新しいスタイルで書き直してみましたが、結果は古いスタイルのクラスで得られたものと変わりません。例を実行するために使用している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"&gt ;,< class "__main __。Base2">、< class "__main __。Base1">、< class "__main __。Base3">、< type "object">)

MROを新しいもので理解しているかどうかわかりませんスタイルクラスが正しくないか、検出できないばかげた間違いをしている。 MROの理解を深めるのを手伝ってください。