質問

これは深刻な問題ではなく、好奇心の問題です:

私は多重継承で遊んでいて、これを渡って来ました:

>>> 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の前に訪問されることも保この場合、これらの保証の両方を満たすことは不可能です

ここに同様の質問があります

パイソン:多重継承と連動したメタクラスの問題

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top