python 設計模式 單例模型

2022-05-12 15:01:34 字數 1309 閱讀 6442

**的設計模式共有25種,不同的應用場景應用不同的設計模式,從而達到簡化**、利於擴充套件、提高效能等目的。本文簡述python實現的單例模式場景。簡而言之,單例模式的應用場景是乙個類物件被例項化多次,在這樣的場景下應用單例模式可以減少物件重複建立的消耗,從而節約記憶體。

使用 類目() 建立物件時,python的直譯器首先會呼叫__new__方法為物件分配空間,同時,__new__方法是乙個由object基類提供的內建的靜態方法,其作用是返回物件的引用。綜上,__new__方法的作用有兩個:

在記憶體中為物件分配空間

返回物件的引用

python的直譯器獲得物件的引用後,會將引用作為第乙個引數傳遞給 __init__ 方法。

單例模型的原理就是對__new__方法進行重寫,而重寫new方法的**非常固定,唯一值得注意的是一定要return super().__new__(cls),否則python直譯器得不到分配了空間的物件引用,就不會呼叫物件的初始化方法。

注意__new__是乙個靜態方法,在呼叫是需要主動傳遞cls引數。

class

musicplayer:

#記錄第乙個被建立物件的引用

__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與設計模式相關介紹 類是抽象的,先...