そのため、私は Python 2.7 の多重継承と MRO の素晴らしい世界について少し調査を行っており、読みながらさまざまな例を試していたところ、本当に困惑するものに出会いました。
これで、古典的なダイヤモンド MI の例が得られました。
class A:
def __init__(self):
print "A"
class B(A):
pass
class C(A):
def __init__(self):
print "C"
class D(B, C):
pass
instance = D()
私が読んだすべての MRO リソースで、この例には DBCA の MRO が含まれている必要があるため、D を初期化すると "C" が出力されますが、代わりに "A" が出力されます。奇妙なことに、A、B、C、または D の定義をそのようなもののサブクラスに変更すると、int
「C」を出力するという予想される動作が得られます
基本クラスがプリミティブ型であるかどうかによって、クラス構造の MRO の動作が異なるのはなぜですか? これはバグですか?