방법 해결 순서 오류
-
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