何度もチェックした後、私はその話題に関する一貫性のない情報を見つけました。Python __del__はデストラクタとして動作しませんか?
場合によっては、__init__ and __del__
がコンストラクタとデストラクタと同じPythonであることがわかりました。 __init__
の場合はこれが当てはまりますが、クラスが作成されたときに呼び出されます。プログラム終了時に__del__
が呼び出されることはありません。
その他のケースでは、__del__
が悪いことがわかりました。すべてを手作業で明示的に割り当て解除する必要があります。
問題は次のとおりです。これはどちらですか? unittest.TestCaseクラスを使用しているので、__del__
を呼び出すと決して呼び出されません。悲しいことに、私はテストを実行する前にプロセスを開始する必要があるため、私はテストを完了したらそれを終了する必要がありますので、涙を落とすことはできません
@DYZ CPythonはガベージコレクションではなく参照カウントを使用しているため、参照がなくなるたびに解放されるものに数えられることがあります。 Pythonの他のバージョンはもちろん、異なる動作をするかもしれません。 –
@MarkRansomあなたは正しいですね。 – DyZ
「__del__を呼び出すと決して呼び出されない」とはどういう意味ですか?どのように呼びますか?このメソッドは(名前が '__'で始まる他のメソッドと同じように)手で呼び出されるべきではありません。オブジェクトへのすべての参照がなくなると、自動的に呼び出されます。特に、 'del'ステートメントを実行するとき。 – DyZ