1. 程式人生 > 其它 >Python - 面向物件程式設計 - __del__() 析構方法

Python - 面向物件程式設計 - __del__() 析構方法

del 語句

Python 提供了 del 語句用於刪除不再使用的變數

語法

del 表示式

刪除變數的栗子

var = "hello"
del var
print(var)


# 輸出結果
    print(var)
NameError: name 'var' is not defined

變數已經被刪除了,所以無法訪問變數

類的析構方法

  • Python 提供了一種機制使得物件被刪除前能夠得到通知
  • 物件被刪除時,如果該物件擁有名為__del__ 的方法,該方法在刪除前被呼叫,該方法又被稱為析構方法

語法

class 類:
    def __del__(self):
        self.屬性

重點

  • 析構方法是物件在被垃圾回收的時候起作用的一個方法
  • 它的執行一般也就意味著物件不能夠繼續引用,回收記憶體
  • Python 建議不要在物件銷燬時做任何事情,因為物件銷燬的時間難以確定
  • 所以析構方法一般無須定義,日哦長使用時無需關心記憶體的分配和釋放,因為此工作都是交給 Python 直譯器來執行
  • 一句話:析構方法的呼叫是由直譯器在進行垃圾回收時自動觸發執行的

栗子一

當物件在某個作用域中呼叫完畢,在跳出其作用域的同時析構方法會自動被呼叫,這樣可以釋放記憶體空間

# 析構方法
class PoloBlog:
    # 構造方法
    def __init__(self):
        
print("自動呼叫構造方法") def __del__(self): print("自動呼叫析構方法,釋放記憶體") blog = PoloBlog() print("最後一句程式碼") # 輸出結果 自動呼叫構造方法 最後一句程式碼 自動呼叫析構方法,釋放記憶體

栗子二

主動 del 物件

# 析構方法
class PoloBlog:
    # 構造方法
    def __init__(self):
        print("自動呼叫構造方法")

    def __del__(self):
        print("自動呼叫析構方法,釋放記憶體
") blog = PoloBlog() # 主動刪除物件 del blog print("最後一句程式碼") # 輸出結果 自動呼叫構造方法 自動呼叫析構方法,釋放記憶體 最後一句程式碼
  • 使用 del 語句,相當於主動呼叫物件的析構方法,會立即刪除物件,並回收記憶體
  • 通常是刪除臨時的物件,對那些長期佔用記憶體的臨時物件進行回收