**的設計模式共有25種,不同的應用場景應用不同的設計模式,從而達到簡化**、利於擴充套件、提高效能等目的。本文簡述python實現的單例模式場景。簡而言之,單例模式的應用場景是乙個類物件被例項化多次,在這樣的場景下應用單例模式可以減少物件重複建立的消耗,從而節約記憶體。
使用 類目() 建立物件時,python的直譯器首先會呼叫__new__方法為物件分配空間,同時,__new__方法是乙個由object基類提供的內建的靜態方法,其作用是返回物件的引用。綜上,__new__方法的作用有兩個:
在記憶體中為物件分配空間
返回物件的引用
python的直譯器獲得物件的引用後,會將引用作為第乙個引數傳遞給 __init__ 方法。
單例模型的原理就是對__new__方法進行重寫,而重寫new方法的**非常固定,唯一值得注意的是一定要return super().__new__(cls),否則python直譯器得不到分配了空間的物件引用,就不會呼叫物件的初始化方法。
注意__new__是乙個靜態方法,在呼叫是需要主動傳遞cls引數。
classmusicplayer:
#記錄第乙個被建立物件的引用
__instance =none
#重寫__new__ 方法建立單例模型
#說明:__new__方法是object基類提供的一種靜態方法。
#作用:1、為物件分配空間;2、返回物件引用
def__new__(cls, *args, **kwargs):
#1、判斷類屬性是否為空引用,若為空則為物件分配空間
if cls.__instance
isnone:
print("
這裡還能執行其他只初始化一次的操作")
cls.
__instance = super().__new__
(cls)
#返回物件引用
return cls.__instance
def__init__
(self, name):
self.name =name
print(f"")
#建立多個物件
player1 = musicplayer("千千"
)player2 = musicplayer("萬萬"
)print(player1 is player2)
輸出結果:
這裡還能執行其他只初始化一次的操作true
python設計模式 單例設計模式
樣式一 class musicplayer object instance none 設定類屬性,用來判斷是否有物件得到記憶體空間 init flag false 0表示還沒有初始化 1代表已經初始化 使用內建函式進行空間的分配 def new cls,args,kwargs cls 哪個類呼叫,就...
python設計模式 單例
是一種常用的設計模式,該模式的主要目的是確保某乙個類有且只有乙個例項存在。當希望系統中,某個類只能出現乙個例項時,就可以應用單例物件。每個例項都會占用一定的記憶體資源,且初始化例項時會影響執行效能,所以當整個系統只需乙個例項時,使用單例模式不僅可減少資源占用,而且因為只初始化一次,還可以加快執行效能...
python 單例設計模式
windows系統中的 站,無論任何地方呼叫的 站都指向的是同乙個 站,站的屬性和方法會被重複呼叫,這樣容易產生衝突浪費資源,這種情況下,單例模式就是乙個很好的實現方法。python的設計模式主要有三大類 建立類設計模式 結構類設計模式 行為類設計模式 python與設計模式相關介紹 類是抽象的,先...