私は、書き込み用のファイルを開くクラスを持っています。del MyClassはオブジェクトを呼び出しません.__ del __()
class MyClass:
def __del__(self):
self.close()
def close(self):
if self.__fileHandle__ is not None:
self.__fileHandle__.close()
が、私のようなコードでオブジェクトを削除する場合:私は、オブジェクトを再インスタンス化しようとした場合
myobj = MyClass()
myobj.open()
del myobj
が、私は値のエラーを取得する私のデストラクタで、私は、ファイルをクローズ関数を呼び出します:
ValueError: The file 'filename' is already opened. Please close it before reopening in write mode.
私はdel myobj
前myobj.close()
を呼び出す場合、私はこの問題を得ることはありません一方。では、なぜ__del__()
が呼ばれていないのですか?
「オブジェクト」から継承してください。そうしないと、6年前から古いスタイルになっています。 – Marcin
さらにコードを表示する必要があります。どのように 'myobj.close()'が何をしているのかを知らずに、物事をどのように変更するのかを教えてくれるでしょうか? – ugoren
'del'は' __del__'を呼び出さないことに注意してください。参照の1つを削除するだけです。一般的には、コンテキストマネージャプロトコル( 'with'文)を使用して明示的に閉じる方がよいでしょう。 – yak