「__del__」という名前のメソッドが デストラクタ として動作します。
デストラクタの定義方法
class TestClass:
def __del__(self):
# ここにデストラクタの処理を記述
サンプルコード
# クラスの定義
class TestClass:
def __init__(self):
print('コンストラクタ実行')
def __del__(self):
print('デストラクタ実行')
# クラスのインスタンス生成
test = TestClass()
# クラスの破棄
del(test)
- 6行目 デストラクタを定義しています。
- 10行目 class を new しています。このタイミングで 'コンストラクタ実行' が出力されます。
- 13行目 class を 破棄しています。このタイミングで 'デストラクタ実行' が出力されます。

クラスを継承した場合の挙動
デストラクタの有無と、呼ばれるデストラクタ基底クラス | 派生クラス | 呼ばれるデストラクタ |
---|---|---|
あり | なし | 基底クラスのデストラクタ |
なし | あり | 派生クラスのデストラクタ |
あり | あり | 派生クラスのデストラクタのみ |
基底クラスのデストラクタを呼ぶ方法
# 派生クラスの定義
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)
- 15行目 基底クラスのコンストラクタを実行しています。
- 22行目 基底クラスのデストラクタを実行しています。

検証環境
- Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
- Microsoft Windows 10 Pro Version 20H2 OS Build 19042.870 Experience: Windows Feature Experience Pack 120.2212.551.0