__del__也稱之爲析構方法
__del__會在對象被刪除以前自動觸發
執行時機: 手動刪除對象時立馬執行,或是程序運行結束時也會自動執行
上例子
列子一python
class People: def __init__(self, name, age): self.name = name self.age = age self.f = open(da, 'w', encoding='utf-8') def __del__(self): print('run======>') # 作回收系統資源相關的事情 self.f.close() obj = People('egon', 18) del obj # del obj會間接刪除f的內存佔用,可是還須要自定製__del__刪除文件的系統佔用 print('apan')
run=-====>
apan
列子二數據庫
class FileTool: """該類用於簡化文件的讀寫操做 """ def __init__(self,path): self.file = open(path,"rt",encoding="utf-8") self.a = 100 def read(self): return self.file.read() # 在這裏能夠肯定一個事,這個對象確定不使用了 因此能夠放心的關閉問文件了 def __del__(self): self.file.close() tool = FileTool("a.txt") print(tool.read())
典型的應用場景:操作系統
建立數據庫類,用該類實例化出數據庫連接對象,對象自己是存放於用戶空間內存中,而連接則是由操做系統管理的,存放於內核空間內存中code
當程序結束時,python只會回收本身的內存空間,即用戶態內存,而操做系統的資源則沒有被回收,這就須要咱們定製__del__,在對象被刪除前向操做系統發起關閉數據庫連接的系統調用,回收資源對象
這與文件處理是一個道理:內存
f=open('a.txt') #作了兩件事,在用戶空間拿到一個f變量,在操做系統內核空間打開一個文件 del f #只回收用戶空間的f,操做系統的文件還處於打開狀態 #因此咱們應該在del f以前保證f.close()執行,即使是沒有del,程序執行完畢也會自動del清理資源,因而文件操做的正確用法應該是 f=open('a.txt') 讀寫... f.close() 不少狀況下你們都容易忽略f.close,這就用到了with上下文管理