class Test(object): def __init__(self, name): self.name = name print('這是構造函數') def say_hi(self): print('hell, %s' % self.name) def __del__(self): print('這是析構函數') obj = Test('bigberg') obj.say_hi() del obj #輸出 這是構造函數 hello bigberg 這是析構函數
構造函數
用於初始化類的內容部狀態,Python提供的構造函數式 __init__(),也就是當該類被實例化的時候就會執行該函數,__init__()方法是可選的,如果不提供,Python 會給出默認的__init__方法。
析構函數
“__del__”就是一個析構函數了,當使用del 刪除對象時,會調用他本身的析構函數,另外當對象在某個作用域中調用完畢,在跳出其作用域的同時析構函數也會被調用一次,這樣可以用來釋放內存空間。
__del__()也是可選的,如果不提供,則Python 會在后台提供默認析構函數
如果要顯式的調用析構函數,可以使用del關鍵字: del obj
垃圾回收機制
s = '123' print('del...running') del s
當我們用del刪除一個對象時,其實並沒有直接清除該對象的內存空間。Python 采用‘引用計數’ 的算法方式來處理回收,即:當某個對象在其作用域內不再被其他對象引用的時候,Python 就自動清除對象。
而析構函數 __del__()在引用的時候就會自動清除被刪除對象的內存空間。