Anonの答え:
「__init__
現在のクラスで行われていることに加えて、superから何かを行う必要がある場合は、自動的に行われ__init__
ないため、自分で呼び出す必要があります。」
それは信じられないことです。彼は相続の原則に正反対の言葉を使っています。
これは、ということではありません「スーパーのから何かが__init__
(...)が自動的に発生しません」基本クラスがあるため、それが自動的に行われますが、それは起こらないということで、__init__
派生-CLASの定義によって上書きされます__init__
それで、__init__
誰かが継承に頼ったときに何を目的としているのかをオーバーライドするので、なぜ派生クラスを定義するのですか?
これは、基本クラスで行われないことを定義する必要があるためです。それ__init__
を取得する唯一の可能性は、その実行を派生クラスの__init__
関数に置くことです。
言い換えると、後者がオーバーライドされなかった場合に、基本クラス__init__
で自動的に行われることに加えて、基本クラスで何かが必要になり__init__
ます。
反対ではありません。
次に、問題は、基本クラスに存在する必要な命令__init__
がインスタンス化の瞬間にアクティブ化されないことです。この非アクティブ化を相殺するには、特別な何かが必要です。ベースクラスを明示的に呼び出すことで、ベースクラスによって実行される初期化__init__
をKEEP、NOT TO ADDすることができます__init__
。それはまさに公式ドキュメントで述べられていることです:
派生クラスのオーバーライドメソッドは、実際には、同じ名前の基本クラスメソッドを単に置き換えるのではなく、拡張したい場合があります。基本クラスのメソッドを直接呼び出す簡単な方法があります:BaseClassName.methodname(self、arguments)を呼び出すだけです。
http://docs.python.org/tutorial/classes.html#inheritance
それだけです。
基本クラスによって実行される初期化、つまり純粋な継承を維持することを目的とする場合、特別なことは何も必要ありません。__init__
派生クラスで関数を定義することは避けなければなりません。
目的が基本クラスによって実行される初期化を置き換えることである場合、__init__
派生クラスで定義する必要があります
基本クラスによって実行される初期化にプロセスを追加することを目的とする場合、基本クラス__init__
への明示的な呼び出しを含む派生クラスを定義する必要があります。__init__
Anonの投稿で私が驚いたのは、彼が相続理論に反していることを表現しているだけでなく、5人の男が髪の毛を回さずに賛成していたこと、そして2年間で誰も反応しなかったことです。興味深い主題を比較的頻繁に読む必要があるスレッド。
object
はタイプミスだったと思います。しかし今、あなたはsuper
あなたの質問のタイトルが参照していることすらありません。