__del__() 方法用於銷毀Python對象——在任何Python對象將被系統回收的時候,系統都會自動調用這個方法。但是不要以為對一個變量執行del操作,該變量引用的對象就會被回收,當然不是,如果有多個變量引用它,del其中一個變量是不會回收該對象的。
栗子如下:
1 #coding=utf-8 2 class Item: 3 def __init__(self,name,price): 4 self.name=name 5 self.price=price 6 def __del__(self): 7 print('del方法刪除對象') 8 #創建一個Item對象,將之賦值給it變量 9 it = Item('鼠標',29.8) 10 x = it 11 #打印it所引用的Item對象 12 del it 13 print('----------')
控制台打印如下:
解釋:第6、7行代碼重寫了Item類的__del__() 方法,當系統將要回收Item時,系統會自動調用Item對象的__del__() 方法。上面的程序先創建了一個Item對象並將該對象賦值給變量it,第10行代碼又將it賦值給x,所以程序中有兩個變量引用了Item對象,然后程序執行del it 刪除it對象,此時由於還有變量引用該Item對象,因此程序並不會回收Item對象。所以會看到如上面的輸出結果,為什么會這樣?因為del it 之后,程序並沒有回收Item對象,只有等到程序即將結束時(系統必須回收所有對象),系統才會回收Item對象。如果將第10行代碼注釋,打印如下:
解釋:注釋之后,當程序執行del it ,此時程序中不再有任何變量引用Item對象,因此系統會立即回收該對象,不需要等到程序結束前。