私はPythonでオブジェクトをクリーンアップするさまざまな方法について読んでいた、と私は(、21)これらの質問につまずいている基本的に__del__()
を使用してクリーンアップすることは信頼できないと言うと、次のコードは避けるべきである。Pythonのクリーンアップに__del __()を使用することは信頼性がありませんか?
def __init__(self):
rc.open()
def __del__(self):
rc.close()
問題は、私はこのコードを正確に使用しており、上記の質問に記載されている問題は再現できません。私の知る限り、クローズドソースソフトウェア(testIDEA、誰ですか?)のためのPythonモジュールを提供しているので、私はwith
ステートメントで代替案に行くことができません。このソフトウェアは特定のクラスのインスタンスを作成し、これらのインスタンスは、その間にサービスを提供する準備ができている必要があります。私が見る__del__()
の唯一の代替手段は、手動でopen()
とclose()
を必要に応じて呼び出すことです。これはかなりバグが多いと思われます。
インタープリタを閉じると、オブジェクトが正しく破棄されるという保証はありません。(そして、気にしないでください。それ以外は、__del__()
を使って火事で遊んでいますか?
PS:当初は、質問に関するメタ情報には再現できないバグを投稿することを考えていましたが、必要な技術的な詳細は得られません。
インタープリタが閉じられたときに '__exit__'が実行されることが保証されていますか? –
また、私は[このリンク](http://eli.thegreenplace.net/2009/06/12/safely-using-destructors-in-python)がこの件に関して非常に役立つことを発見しました。 –
@RickTeacheyあなたは '__del__'を' __exit__'と間違えましたか、私のコードで '__exit__'を使うことをお勧めしますか?また、閉鎖時に問題を許容することができます。 –