<一覧に戻る

super() 関数の使い方

super() 関数は、Pythonにおいてクラスの継承を扱う際に非常に便利な機能です。この関数を使うことで、親クラスのメソッドやプロパティにアクセスすることができ、メソッドのオーバーライドや多重継承の際に特に重要な役割を果たします。

super() の基本的な使い方

super() を使うことで、親クラスのメソッドを呼び出すことができます。以下に基本的な例を示します。

サンプルコード

class Parent:
    def __init__(self):
        self.value = "親クラス"

    def show_value(self):
        print(self.value)

class Child(Parent):
    def __init__(self):
        super().__init__()  # 親クラスの __init__ メソッドを呼び出す
        self.value = "子クラス"

    def show_value(self):
        super().show_value()  # 親クラスの show_value メソッドを呼び出す
        print(self.value)

# インスタンスの作成
child_instance = Child()
child_instance.show_value()

コードの解説

  1. Parent クラス: Parent クラスには、__init__ メソッドと show_value メソッドがあります。__init__ メソッドで value 属性を設定し、show_value メソッドでその値を表示します。

  2. Child クラス: Child クラスは Parent クラスを継承しています。__init__ メソッド内で super().__init__() を呼び出すことで、親クラスの初期化処理を実行します。その後、value 属性を「子クラス」に上書きしています。

  3. メソッドのオーバーライド: show_value メソッドをオーバーライドし、親クラスの show_value メソッドを呼び出した後に、子クラスの value を表示します。

  4. 出力: インスタンス child_instance が呼ばれると、親クラスと子クラスの両方の値が表示されます。出力は以下の通りです。

親クラス
子クラス

多重継承と super()

super() は多重継承のシナリオでも役立ちます。以下の例では、複数の親クラスを持つ子クラスを作成します。

サンプルコード

class A:
    def __init__(self):
        self.value_a = "クラス A"

class B:
    def __init__(self):
        self.value_b = "クラス B"

class C(A, B):
    def __init__(self):
        super().__init__()  # Aの __init__ を呼び出す
        B.__init__(self)   # Bの __init__ を直接呼び出す

    def show_values(self):
        print(self.value_a)
        print(self.value_b)

# インスタンスの作成
c_instance = C()
c_instance.show_values()

コードの解説

  1. クラス A と B: それぞれ独自の __init__ メソッドを持つクラスです。

  2. クラス C: AB を継承しています。super().__init__() を使って A の初期化を行い、次に B.__init__(self) を呼び出して B の初期化も実行します。

  3. 出力: show_values メソッドを呼び出すことで、両方の親クラスの属性を表示します。出力は以下の通りです。

クラス A
クラス B

まとめ

super() 関数を使用することで、親クラスのメソッドやプロパティに簡単にアクセスできるようになります。特にメソッドのオーバーライドや多重継承の状況では、コードの可読性や保守性を向上させるために重要です。これを活用して、より強力なオブジェクト指向プログラミングを行いましょう。

出力結果: