方法解决顺序错误

时间:2012-05-20 16:20:07

标签: python multiple-inheritance method-resolution-order

这更像是一个好奇的问题,而不是一个严肃的问题:

我正在玩多重继承,并且正在进行:

>>> 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的继承会产生某种名称模糊性。有人愿意解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

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

这是一个类似的问题

Python: Problem with metaclasses in conjunction multiple inheritance