2013-06-15 5 views
0

수퍼 클래스 초기화 함수를 호출 할 때 다음과 같은 중요한 차이점이 있다면 무엇이 있을까요? (당신이 오타를 수정하고 슈퍼에 대한 호출에 Child_1을 만들어 주겠다고하지만)수퍼 클래스의 생성자를 호출하는 이러한 방법의 차이점은 무엇입니까?

class Child_1(Parent): 
    def __init__(self): 
     super(Child, self).__init__() 

class Child_2(Parent): 
    def __init__(self): 
     super(Parent, self).__init__() 

class Child_3(Parent): 
    def __init__(self): 
     Parent.__init__(self) 
+0

이들은 메타 클래스가 아닙니다. – jamylak

+0

그건 상속이 다루는 것이 아닙니다. –

+0

나는 무엇을 질문해야합니까? –

답변

8

첫 번째 형태 원하는 일반적으로했던 것과 것이다. 상속 계층 구조에서 올바른 메서드를 찾습니다.

두 번째 형식의 경우이 메서드를 구현하는 부모 클래스 인 부모 클래스를 찾고 있으므로 매우 특별한 사용 사례가 있어야합니다 (부모를 건너 뛰고 싶다면 부모로부터 파생되지 말 것).)하고 싶습니다.

대다수의 경우 세 번째 코드는 부모 코드를 보지 않아도 첫 번째 코드와 동일하게 작동합니다. 확실치 않습니다. 세 번째 메서드보다 첫 번째 메서드의 장점은 자식의 기본 클래스를 변경할 수 있고 올바른 메서드가 여전히 호출된다는 것입니다.

또한 첫 번째 형식은 협동 다중 상속을 허용합니다. 이것이 유용하거나 필요한 경우를 이해하려면 this post 또는 this writeup을 참조하십시오.

관련 문제