문제

이것은 심각한 문제라기보다는 호기심의 문제에 가깝습니다.

다중 상속을 가지고 놀다가 다음과 같은 내용을 발견했습니다.

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