我有一個打開文件進行寫入的類。在我的析構函數,我調用關閉該文件的函數:del MyClass不會調用object .__ 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.
,而如果我叫myobj.close()
del myobj
之前,我不明白這個問題。那麼爲什麼__del__()
沒有被叫?
嘗試從'對象'繼承 - 不這樣做已經被認爲是過時的風格約六年。 – Marcin 2012-01-18 09:37:10
你應該展示更多的代碼。怎麼能告訴你'myobj.close()'如何改變,而不知道它是幹什麼的? – ugoren 2012-01-18 09:37:49
請記住'del'不會調用__del__'。它只是刪除了其中一個參考。通常最好是明確關閉,可能使用上下文管理器協議('with'語句)。 – yak 2012-01-18 09:45:50