我閱讀不同的方式來清理對象在Python中,我已經對這些問題跌跌撞撞(1,2)基本上說,清理使用__del__()
是不可靠的,下面的代碼應避免:依靠__del __()進行python清理不可靠嗎?
def __init__(self):
rc.open()
def __del__(self):
rc.close()
問題是,我正在使用此代碼,並且我無法再現上述問題中引用的任何問題。據我所知,我不能替代with
聲明,因爲我爲閉源軟件提供了一個Python模塊(testIDEA,任何人?)該軟件將創建特定類的實例並處理它們,這些實例必須準備好在兩者之間提供服務。我所看到的__del__()
的唯一替代方法是根據需要手動調用open()
和close()
,我認爲這會非常容易出錯。
我明白,當我關閉解釋器時,不能保證我的對象將被正確銷燬(並且它並不會影響我很多,甚至Python作者認爲它是確定的)。除此之外,我是否在使用__del__()
進行清理? PS:我最初考慮發佈關於帶有無法複製的bug的問題的meta,但意識到我不會獲得我需要的技術細節。
當解釋器關閉時,'__exit__'甚至可以保證執行...? –
另外:我發現[此鏈接](http://eli.thegreenplace.net/2009/06/12/safely-using-destructors-in-python)對此主題非常有幫助。 –
@RickTeachey你錯誤了'__del__'作爲'__exit__',還是你建議我在我的代碼中使用'__exit__'?另外,我可以在結束時容忍問題。 –