Pythonで子クラスから親クラスのメソッドを呼び出すには、super()関数を使うのが一般的です。この関数は、オブジェクト指向の継承構造の中で、親クラスのメソッドやコンストラクタを簡単に呼び出す方法を提供します。

super()の基本的な使い方

以下は、親クラスのメソッドをsuper()で呼び出す基本的な例です。

class Parent:
    def greet(self):
        print("Hello from Parent")
class Child(Parent):
    def greet(self):
        super().greet()  # 親クラスのgreetを呼び出す
        print("Hello from Child")
child = Child()
child.greet()

このコードでは、super()を使って親クラスのgreetメソッドを呼び出し、その後に子クラス独自の処理を追加しています。Python 3では、super()を使う際にクラス名やselfを明示的に渡す必要がなくなりました。

Python 2とPython 3の違い

Python 2では、super()にクラス名とselfを渡す必要がありました。

class Child(Parent):
    def greet(self):
        super(Child, self).greet()  # Python 2の形式

Python 3では、この簡素化された形が推奨されています。

複数継承時のsuper()の動作

複数の親クラスを持つ場合、super()はメソッド解決順序(MRO)に基づいて次に呼び出すクラスを決定します。すべてのクラスがsuper()を正しく使用している場合、複数の親クラスからのメソッドを連続して呼び出すことができます。

class A:
    def do_something(self):
        print("A's method")
class B(A):
    def do_something(self):
        super().do_something()
        print("B's method")
class C(B):
    def do_something(self):
        super().do_something()
        print("C's method")
c = C()
c.do_something()

この例では、CBを、BAを呼び出し、各クラスのメソッドが順に実行されます。

注意点

  • super()の使用は継承構造が正しく設計されている場合に便利です。特に複数継承時は、すべてのクラスがsuper()を使っていることが前提です。
  • Python 3での簡素なsuper()呼び出しは、コードをシンプルに保つため推奨されます。 Pythonでの継承やsuper()の使い方を正しく理解することで、効率的で保守性の高いコードを作成できるようになります。