super()
親クラスにアクセスできます。メソッドの呼び出しをtypeの親または兄弟クラスに委譲するプロキシオブジェクトを返します。
これはクラスの中でオーバーライドされた継承メソッドにアクセスするのに便利です。
superの典型的な用途は 2 つあり、第一に、単継承のクラス階層構造で、superは名前を明示することなく親クラスを参照するのに使え、コードをメンテナンスしやすくなります。
この用途は他のプログラミング言語で見られる super の用途によく似ています。
2番目のユースケースは、動的実行環境で協調多重継承をサポートが出来ることです。
このユースケースはPython固有のものであり、静的にコンパイルされた言語や単一継承のみをサポートする言語には見られません。
これにより、複数の基本クラスが同じメソッドを実装する「ダイヤモンドダイアグラム」を実装できます。
優れた設計では、このような実装はすべての場合に同じ呼び出しシグネチャを持つ必要があります。
class C(B):
def method(self, arg):
super().method(arg) # This does the same thing as:
# super(C, self).method(arg)
使用例
class A:
def __init__(self):
print('Aクラスのコンストラクタが呼び出します。')
# 実行結果 Aクラスのコンストラクタが呼び出します。
class B(A):
def __init__(self):
super().__init__()
print('Bクラスのコンストラクタが呼び出します。')
# 実行結果 Bクラスのコンストラクタが呼び出します。
b = B()