super() 親クラスのプロキシ
最終更新:2026-09-22
super() 親クラスのプロキシ
super() は親クラスのプロキシオブジェクトを返します;サブクラスのメソッド内で親クラスの実装を呼び出せます。
| カテゴリ | 組み込み関数 |
|---|---|
| 種類 | 組み込み関数 |
| Python バージョン | all |
📝 構文
super([type[, object-or-type]])
⚙️ 引数
| type 任意 | The class; the zero-arg form infers it.(デフォルト値:None) |
|---|---|
| obj 任意 | An instance or class for MRO resolution.(デフォルト値:None) |
戻り値:A proxy to the next class in the MRO; methods can be called through it.
💥 例外
RuntimeError— Raised when the zero-arg form is used outside a class.TypeError— Raised when obj is not an instance (or subclass) of type.
▶ 例
下のコードを編集し「実行」をクリックすると、出力パネルに結果が表示されます:
実行結果:
A.hello
B.hello
🏷️ 関連する組み込み関数
💡 関連するケース
さらに多くのケースは近日公開予定です。
❓ よくある質問
Qsuper() は何をするもの?
Aサブクラスのメソッド内で親クラスの同名実装を呼び出します。super().hello() は MRO の「次のクラス」の hello メソッドを探して呼び出します。
Qsuper() はなぜクラスのメソッド内で呼ぶ必要があるの?
A引数なしの形式は「現在のクラス+現在のインスタンス」を自動で推論します。クラス外(普通の関数内など)で呼ぶと RuntimeError: super(): no arguments になります。
Qsuper().__init__() を書く必要があるのはどんなとき?
Aサブクラスが __init__ をオーバーライドしつつ、親クラスにも初期化を実行させたいときです。書かないと親の __init__ は実行されません(親が object の場合を除く)。
Qsuper() は多重継承でどの順に親クラスを探しますか?
AMRO(メソッド解決順序)に従います。super() は「直接の親」ではなく「MRO の次のクラス」なので、多重継承ではダイヤモンド継承を正しく処理し、親が二重に呼ばれるのを防ぎます。