デストラクターは、オブジェクトが破棄されるときに呼び出されます。 Python では、メモリ管理を自動的に処理するガベージ コレクターがあるため、C ほどデストラクターは必要ありません。 __del__() メソッドは、Python ではデストラクター メソッドと呼ばれます。この関数は、オブジェクトへのすべての参照が削除されたとき、つまりオブジェクトがガベージ コレクションされたときに呼び出されます。
デストラクター宣言の構文:
def __del__(self): # body of destructor
例 1: 以下は、デストラクターの簡単な例です。デストラクターは、del キーワードを使用してオブジェクト「obj」へのすべての参照を削除することによって自動的に呼び出されます。
# Python program to illustrate destructor class Employee: # Initializing def __init__(self): print('Employee created.') # Deleting (Calling destructor) def __del__(self): print('Destructor called, Employee deleted.') obj = Employee() del obj
出力:
Employee created. Destructor called, Employee deleted.
注: デストラクターは、プログラムの終了後、またはオブジェクトへの参照がすべて削除されたときに呼び出されます。オブジェクトがスコープ外になったときではなく、参照カウントがゼロになったとき。
例 2: この例では、上記の考慮事項について説明します。ここで、「Program End...」が出力された後にデストラクターが呼び出されることに注意してください。
# Python program to illustrate destructor class Employee: # Initializing def __init__(self): print('Employee created') # Calling destructor def __del__(self): print("Destructor called") def Create_obj(): print('Making Object...') obj = Employee() print('function end...') return obj print('Calling Create_obj() function...') obj = Create_obj() print('Program End...')
出力:
Calling Create_obj() function... Making Object... Employee created function end... Program End... Destructor called
例 3: 次に、次の例を考えてみましょう:
# Python program to illustrate destructor class A: def __init__(self, bb): self.b = bb class B: def __init__(self): self.a = A(self) def __del__(self): print("die") def fun(): b = B() fun()
出力:
die
この例では、この例では、関数 fun() が呼び出されると、クラス B のインスタンスが作成され、それ自体がクラス A に渡され、クラス B への参照が設定され、循環参照が作成されます。
通常、これらのタイプの循環参照を検出するために使用される Python のガベージ コレクターはそれらを削除しますが、この例では、カスタム デストラクターを使用してこの項目を「収集不可能」(収集不可能) としてマークします。) 。
簡単に言うと、オブジェクトが破棄される順序がわからないため、オブジェクトは放置されます。したがって、インスタンスに循環参照が含まれる場合、アプリケーションが実行されている限り、インスタンスはメモリ内に存在します。
関連する推奨事項: 「Python チュートリアル 」
以上がPythonのデストラクタについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。