这更多的是好奇心的问题,而不是一个严重的问题:

我在玩多重继承,遇到了这个问题:

>>> 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 以前 A 产生某种名称歧义。有人能解释一下这里发生了什么吗?

有帮助吗?

解决方案

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

这是一个类似的问题

巨蟒:元类结合多重继承的问题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top