Anon의 답변에서 :
" __init__
현재 수업에서 수행되고있는 것 외에 수퍼로부터 무언가를해야한다면 __init__
, 자동으로 일어나지 않기 때문에 직접 호출해야합니다."
그는 믿어지지 않습니다 : 그는 상속의 원칙과 정확히 반대되는 말을하고 있습니다.
그것은 것이 아니다 "슈퍼의에서 뭔가 __init__
(...) 자동으로 일어나지 않을 것입니다" 기본 클래스 '가 있기 때문에 자동으로 일어날 것입니다,하지만 일이 발생하지 __init__
파생-제공자 라이선스 계약의 정의에 의해 오버라이드 (override)한다__init__
그러면 파생 된 클래스를 정의하는 이유 __init__
는 누군가가 상속에 의존 할 때 목표를 무시하기 때문입니다.
그것은 기본 클래스에서 수행되지 않은 것을 정의해야하기 때문이며 __init__
, 그것을 얻을 수있는 유일한 가능성은 실행을 파생 클래스의 __init__
함수 에 넣는 것입니다.
다시 말해, 이 클래스__init__
__init__
가 재정의되지 않은 경우 기본 클래스 에서 자동으로 수행되는 것 외에도 기본 클래스에 무언가가 필요합니다 .
반대가 아닙니다.
그러면 문제는 기본 클래스에있는 원하는 명령 __init__
이 인스턴스화 시점에 더 이상 활성화되지 않는다는 것입니다. 이 비활성화를 상쇄하기 위해서는 특별한 것이 필요하다 :베이스 클래스에 의해 수행되는 초기화를 추가하지 말고 유지__init__
하기 위해 베이스 클래스를 명시 적으로 호출한다 . 그것이 공식 문서에서 정확히 말한 것입니다.__init__
파생 클래스의 재정의 메서드는 실제로 같은 이름 의 기본 클래스 메서드 를 단순히 대체하기보다는 확장하는 것이 좋습니다 . 기본 클래스 메소드를 직접 호출하는 간단한 방법이 있습니다. BaseClassName.methodname (self, arguments)을 호출하십시오.
http://docs.python.org/tutorial/classes.html#inheritance
그게 다 이야기입니다 :
목표가 기본 클래스에 의해 수행되는 초기화를 유지하는 것, 즉 순수한 상속, 특별한 것은 필요하지 않으며 __init__
파생 클래스에서 함수 를 정의하지 않아야합니다.
목표가 기본 클래스에 의해 수행 된 초기화를 대체하는 __init__
경우 파생 클래스에 정의되어야합니다.
기본 클래스에 의해 수행 된 초기화에 프로세스를 추가하는 것이 목표 인 경우, 기본 클래스에 __init__
대한 명시 적 호출을 포함하여 파생 클래스를 정의해야합니다.__init__
Anon의 포스트에서 놀랍게 생각하는 것은 그가 상속 이론의 반대를 표현할뿐만 아니라 머리카락을 돌리지 않고 upvoted하는 5 명의 사람들이 지나갔으며, 2 년 안에 아무도 반응하지 않았다는 것입니다. 흥미로운 주제를 비교적 자주 읽어야하는 스레드
object
이 오타 라는 것을 이해할 수 있습니다 . 그러나 지금 당신super
은 당신의 질문의 제목 조차 언급 하지 않습니다 .