単一継承では、super() と __init__() によって実装される関数は似ています
出力結果:
違いは、super() 継承を使用するときに基本クラスを明示的に参照する必要がないことです。
super() は新しいスタイルのクラスでのみ使用できます
基底クラスを古いスタイルのクラスに変更します。つまり、基底クラスを継承しません
実行すると、bの初期化時にエラーが報告されます:
super は親クラスではなく、継承シーケンスの次のクラスです
多重継承の場合、次の関数と同様に、super() は継承順序で親クラスではなく次のクラスを返すことと同等です。
リーリー例:
リーリー
リーリー
実行プロセスは以下と同等です: childC() を初期化するとき、最初に super(childA, self) を呼び出します。childA のコンストラクターで __init__() は、継承順序で childA の後のものを返します。現在のクラス childB; 次に childB().__init()__ を実行し、この順序で続行します。
多重継承において、childA()のsuper(childA, self).__init__()をBase.__init__(self)に置き換えると、実行時、childAを継承した後、省略されたBaseクラスに直接ジャンプします。子供B:
リーリー
それ自体の場合は、次のクラスを順番に継承します。
それが継承チェーン内の前のクラスの場合、無限に再帰されます
それが継承チェーンの後のクラスである場合、継承チェーンの概要自体と受信クラスの間のクラスは無視されます。
たとえば、childA() の super を super(childC, self).init() に変更すると、プログラムは無限に再帰的に実行されます。
例:
リーリー
childA が Base に基づいている場合、childB は childA と Base を継承し、childB が Base の __init__() メソッドを呼び出す必要がある場合、__init__() が 2 回実行されます。
リーリーBaseの __init__() メソッドが2回実行されます
繰り返しの呼び出しを避けるには super() を使用してください
上記は編集者が紹介した Python クラスの super() と __init__() の違いです。ご質問があればメッセージを残してください。編集者が返信します。間に合うようにあなたに。スクリプト ハウス Web サイトをサポートしてくださった皆様にも感謝いたします。