-
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
我得到一个 TypeError
.但是,当我反转多重继承的顺序时:
>>> class B(A, object): pass
>>> b = B()
A.__init__() called
它工作正常。我假设在第一个实例中,继承 object
以前 A
产生某种名称歧义。有人能解释一下这里发生了什么吗?
解决方案
A
是继承自 object
或子类的 object
, ,它不起作用。MRO保证最左边的基地在最右边的基地之前被访问-但它也保证在祖先中,如果x是y的子类,那么x在y之前被访问。在这种情况下,不可能同时满足这两种保证
这是一个类似的问题
不隶属于 StackOverflow