다이아몬드 상속 구조로 테스트 중인데 super().__init__() 호출 결과가 예상이랑 달라서요. 저는 부모를 부르는 거라 D 위로 쭉 올라가면서 A가 두 번 초기화될 줄 알았거든요.
class A:
def __init__(self):
super().__init__()
print("A")
class B(A):
def __init__(self):
super().__init__()
print("B")
class C(A):
def __init__(self):
super().__init__()
print("C")
class D(B, C):
def __init__(self):
super().__init__()
print("D")
D()
출력이 A C B D 순으로 나오고, A는 딱 한 번만 찍혀요. D.__mro__ 찍어보니 [D, B, C, A, object] 더라고요. super()가 그냥 상위 부모가 아니라 이 mro 순서에서 다음 걸 부르는 거라고 어렴풋이 들었는데, 그럼 B 안의 super()가 A가 아니라 C를 부른다는 얘기잖아요. 이게 어떻게 성립하는 건지 원리 설명 부탁드려요.