對象創建與銷燬
Python中已雙下劃線開頭和結尾的方法是特殊方法,分別對應對象的一些特殊行爲。看過《參考手冊》對於對象行爲與特殊方法的系統解釋,這裏整理一下筆記。
這裏主要介紹python中對象創建、初始化和銷燬等行爲對應的特殊方法。
__new__(cls, [, *args [, **kwargs]]) #對象創建行爲
__init__(self, [, *args [, **kwargs]]) #對象初始化行爲
__del__(self) #對象銷燬行爲
__new__()方法
__new__()方法對應實例的創建,需要返回類對象。
__init__()方法
__init__()方法對應對象的初始化,不需要返回。
__del__()方法
對象銷燬時調用,用於釋放資源。
總結
__new__()與__init__()區別
有一個明顯的區別是傳參和返回:
__new__()第一個參數是cls, __init__()第一個參數是self,__new__()與__init__()的其他參數必須保持一致;
__new__方法一般需要返回類的對象,__init__沒有返回。
創建與初始化的區別還是很好理解的。《參考》中給出一個例子。
調用A(args)創建對象時,會轉換爲以下步驟:
#python x = A.__new__(A, args) if isinstance(x, A): x.__init__(args)
這個步驟很好的解釋了:如果__new__不返回對象,則__init__不會被調用。
__new__()與__del__()使用
__new__()與__del__()方法一般很少需要用戶定義。__new__()方法通常只定義在元類或繼承自不可變類型之一(證書、字符串、元組等)的用戶定義對象中。__del__()方法只有存在某種關鍵資源管理問題的情況下才會定義,如釋放鎖定或關閉連接時。