2016-10-05 5 views
0

다중 인 오턴스에서 메서드 확인 순서를 이해하려고합니다. 다음은 내가 사용하고있는 코드입니다. 클래스 'ClassC'의 객체를 만들려고 할 때 ClassA의 생성자 만 호출됩니다.이 경우 어떻게 해결됩니까?Python에서 다중 상속의 메서드 확인

class ClassA: 
    def __init__(self): 
     print "inside a's init" 

class ClassB: 
    def __init__(self): 
     print "inside b's init" 

class ClassC(ClassA,ClassB): 
    pass 

c = ClassC() 

출력 :

inside a's init 
+0

파이썬 2에서는'class ClassA (object) :'와 같이 새로운 스타일의 클래스를 사용해야합니다 (파이썬 3에서는 모든 클래스가 새로운 스타일입니다). 그리고'ClassA'의'.__ init__' 메소드에'super (ClassA, self) .__ init __()'를 추가하십시오. ('ClassB'에 유사한 호출을 추가 할 수도 있지만'ClassB'가 상속 체인의 끝이기 때문에 필요 없습니다.) 파이썬 핵심 개발자 인 Raymond Hettinger가 연상 된 질문에서 답을 얻지 못하면 질문에 대한 답을 알려주십시오. –

+0

그것은 @ PM2Ring에서 유용했습니다. 고마워요. – Heisenberg

답변

0

내가 그 세부에서 MRO 알고리즘을 다루고 생각 파이썬 PEP가 있지만 오히려 복잡하다. 또한 Fluent Python 책에서 다룹니다. 나는 짧은 이야기는 당신이

class ClassC(ClassB,ClassA): 
    pass 

로 전환하면 난 당신이 변화를 볼 것이다 내기

을 왼쪽에서 오른쪽으로가는 것을 믿습니다. 당신이

help(c) 

를 호출하는 경우는 MRO가 인쇄 볼 수 또한

를 (업데이트, 당신은 확실히 변화를 볼 수 있습니다).

+0

예. 성공했습니다. 하지만, 제 유스 케이스는 단지 두 번째 클래스의 생성자를 호출하는 것과는 조금 다릅니다. 해결 됐어요. 고맙습니다! – Heisenberg