1

これは、深刻な問題というよりも、好奇心の問題です。

私は多重継承で遊んでいて、これに出くわしました:

>>> 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

取得しTypeErrorます。ただし、多重継承の順序を逆にすると、次のようになります。

>>> class B(A, object): pass
>>> b = B()
A.__init__() called

正常に動作します。object最初に、 beforeの継承Aによって、ある種の名前のあいまいさが生じると思いました。誰かがここで何が起こっているのか説明したいと思いますか?

4

1 に答える 1

4

Aから継承されているobjectか、のサブクラスであるobjectため、機能しません。MROは、左端の塩基が右端の塩基の前に訪問されることを保証しますが、祖先の間でxがyのサブクラスである場合、xがyの前に訪問されることも保証します。この場合、これらの両方の保証を満たすことは不可能です。

これは同様の質問です

Python:多重継承と組み合わせたメタクラスの問題

于 2012-05-20T16:28:43.867 に答える