Python - class で コンストラクタ(constructor) を定義する方法

「__init__」という名前のメソッドが コンストラクタ として動作します。

コンストラクタの定義方法(引数なし)

class TestClass:
    def __init__(self):
        # ここにコンストラクタの処理を記述

サンプルコード

# クラスの定義
class TestClass:
    def __init__(self):
        print('コンストラクタ実行')

# クラスのインスタンス生成
test = TestClass()
実行結果
実行結果

コンストラクタの定義方法(引数あり)

class TestClass:
    def __init__(self, arg1, arg2):
        # ここにコンストラクタの処理を記述
        self.arg1 = arg1
        self.arg2 = arg2
サンプルコード(引数あり)
# クラスの定義
class TestClass:
    def __init__(self, message):
        self.message = message

    def print(self):
        print(self.message)

# クラスのインスタンス生成
test = TestClass('初期化メッセージ')

# メソッド実行
test.print()
実行結果
実行結果

クラスを継承した場合の挙動

コンストラクタの有無と、呼ばれるコンストラクタ
基底クラス 派生クラス 呼ばれるコンストラクタ
あり なし 基底クラスのコンストラクタ
なし あり 派生クラスのコンストラクタ
あり あり 派生クラスのコンストラクタのみ
基底クラスと派生クラスにコンストラクタがある場合、派生クラスのコンストラクタしか実行されません。 基底クラスのコンストラクタを呼びたいときは、super() を使用します。

基底クラスのコンストラクタを呼ぶ方法

# 派生クラスの定義
class SubClass(BaseClass):
    def __init__(self):
        # 基底クラスのコンストラクタを呼ぶ
        super().__init__()

サンプルコード

# 基底クラスの定義
class BaseClass:
    def __init__(self):
        print('基底クラスのコンストラクタ実行')


# 派生クラスの定義
class SubClass(BaseClass):
    def __init__(self):
        # 基底クラスのコンストラクタを呼ぶ
        super().__init__()

        print('派生クラスのコンストラクタ実行')

# 派生クラスのインスタンス生成
test = SubClass()
実行結果
実行結果

検証環境