2012-05-20 2 views
0

이 오히려 심각한 문제보다는 호기심의 문제의 더이 전체의방법 해상도 ​​주문 오류

내가 다중 상속과 놀아 온되었다

>>> 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 

잘 작동합니다. 첫 번째 인스턴스에서 A 전에 object의 상속이 이름 모호성을 생성한다고 가정했습니다. 아무도 여기서 무슨 일이 일어나는지 설명해 주겠니?

답변

2

Aobject 또는 하위 클래스 object에서 상속되며 작동하지 않습니다. MRO는 가장 왼쪽의베이스가 가장 오른쪽의베이스보다 먼저 방문하도록 보장하지만, x가 y의 서브 클래스이면 조상들 사이에 x가 y보다 먼저 방문한다는 것을 보장합니다. 그것은이 경우 다음

이러한 보장을 모두 만족하는 것은 불가능 것은 비슷한 질문

Python: Problem with metaclasses in conjunction multiple inheritance

에게 있습니다