这更像是一个好奇的问题,而不是一个严肃的问题:
我正在玩多重继承,并且正在进行:
>>> 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
的继承会产生某种名称模糊性。有人愿意解释这里发生了什么吗?
答案 0 :(得分:2)
A
继承自object
或object
的子类,但不起作用。 MRO保证在最右边的基地之前访问最左边的基地 - 但它也保证在祖先中如果x是y的子类,则在y之前访问x。在这种情况下,不可能满足这两种保证
这是一个类似的问题
Python: Problem with metaclasses in conjunction multiple inheritance