Python3 - class で デストラクタ(destructor) を定義する方法

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

デストラクタの定義方法

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

サンプルコード

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

    def __del__(self):
        print('デストラクタ実行')

# クラスのインスタンス生成
test = TestClass()

# クラスの破棄
del(test)
実行結果 実行結果

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

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

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

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

サンプルコード

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


    def __del__(self):
        print('基底クラスのデストラクタ実行')


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

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


    def __del__(self):
        # 基底クラスのデストラクタを呼ぶ
        super().__del__()

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

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

# 派生クラスの破棄
del(test)
実行結果 実行結果

検証環境

関連ページ