__del__ 是 Python 中的魔術方法。這些神奇的方法使我們能夠在面向對象編程中實現一些非常巧妙的技巧。它們也稱為 Dunder 方法。這些方法由兩個下劃線 (__) 用作前綴和后綴來標識。
在Python中,我們使用__new__()創建一個對象并使用__init__()進行初始化。然而,要破壞一個對象,我們有 __del__()。
示例
讓我們創建和刪除一個對象 –
class Demo: def __init__(self): print("We are creating an object."); # destructor def __del__(self): print("We are deleting an object."); # Createing and deleting an object ob = Demo(); del ob;
登錄后復制
輸出
We are creating an object. We are deleting an object.
登錄后復制
原因
但是,如果一個類定義了 __del__ 但在刪除對象時沒有調用,原因可能有很多 –
del 語句不一定調用 __del__() – 它只是減少對象的引用計數,如果達到零,則調用 __del__()。
__del__() 方法可以隨機調用。 – 如果您的數據結構包含循環鏈接,則引用計數將永遠不會回到零。 Python 運行一種算法來檢測此類循環,但垃圾收集器可能會在對數據結構的最后一個引用消失后的某個時間運行。
解決問題
以下是修復 –
不要直接調用 __del__() – _del__() 應調用 close(),并且 close() 應確保可以對同一對象多次調用它。
避免循環引用 – 使用weakref模塊來避免循環引用。它允許您指向對象而不增加其引用計數。 Weakref 模塊還可以用于獲取類的實例
以上就是我的Python類定義了__del__方法,但是當我刪除對象時它并沒有被調用的詳細內容,更多請關注www.xfxf.net其它相關文章!