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

它工作正常。我假设在第一个例子中,objectbefore的继承A会产生某种名称歧义。有人愿意解释这里发生了什么吗?

4

1 回答 1

4

A继承自object或子类object,它不起作用。MRO 保证最左边的碱基在最右边的碱基之前被访问——但它也保证在祖先中,如果 x 是 y 的子类,那么 x 在 y 之前被访问。在这种情况下,不可能同时满足这两个保证

这是一个类似的问题

Python:元类与多重继承结合的问题

于 2012-05-20T16:28:43.867 回答