メソッド解決順序エラー
-
12-12-2019 - |
質問
これは深刻な問題ではなく、好奇心の問題です:
私は多重継承で遊んでいて、これを渡って来ました:
>>> class A(object):
... def __init__(self): print "A.__init__() called"
...
>>> class B(object, A): pass
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Cannot create consisten method resolution
order (MRO) for bases object, A
私はaを得る TypeError
.しかし、多重継承の順序を逆にすると:
>>> class B(A, object): pass
>>> b = B()
A.__init__() called
それは正常に動作します。私は最初のインスタンスでは、の継承と仮定しました object
前に A
ある種の名前のあいまいさを作成します。誰かがここで何が起こっているのか説明したいと思いますか?
解決
A
から継承されます object
またはサブクラスの object
, 、それは動作しません。MROは、左端の基底が右端の基底の前に訪問されることを保証しますが、xがyのサブクラスである場合、祖先の間でxがyの前に訪問されることも保この場合、これらの保証の両方を満たすことは不可能です
ここに同様の質問があります
所属していません StackOverflow