Python-單例模式-只初始化一次
阿新 • • 發佈:2019-02-03
單例模式 只初始化一次
單例模式建立的原理就是借用了私有類屬性的性質,我們知道私有類屬性不能直接在類外被修改,所以用私有類屬性的狀態當做條件來控制類內方法的呼叫
下面程式碼中的__species負責控制__new__方法,保證例項物件只能被建立一次,建立多個物件,均指向同一個資料記憶體位置
__first_init負責控制__init__方法,保證再次建立的物件不能更改初始化的內容
class Animal(object): __species = None __first_init = True def __new__(cls, *args, **kwargs): if cls.__species == None: cls.__species = object.__new__(cls) return cls.__species def __init__(self,name): print("-----init----") if self.__first_init: self.name = name self.__class__.__first_init = False # 相當於Animal.__first_init = False def __str__(self): return "-------str---%s" %self.name if __name__ == '__main__': dog = Animal('二哈') print(dog) print(id(dog)) dog2 = Animal('金毛') print(dog) print(id(dog2)) 執行結果: -----init---- -------str---二哈 139764904013104 -----init---- -------str---二哈 139764904013104 呼叫new方法必須要有return, 返回建立的例項物件或者是父類的__new__方法建立例項物件
由執行結果可知,兩次建立的例項物件指向了同一個id,即 建立單例模式
第二次建立的例項物件dog2“金毛”,並未建立成功,仍然是第一次創建出來的例項物件dog”二哈”,即 初始化一次