python設計模式 單例

2021-09-01 09:25:28 字數 1369 閱讀 5945

是一種常用的設計模式,該模式的主要目的是確保某乙個類有且只有乙個例項存在。當希望系統中,某個類只能出現乙個例項時,就可以應用單例物件。

每個例項都會占用一定的記憶體資源,且初始化例項時會影響執行效能,所以當整個系統只需乙個例項時,使用單例模式不僅可減少資源占用,而且因為只初始化一次,還可以加快執行效能;比如說系統中通過config的類來讀取配置檔案,系統中很多地方都需要使用配置檔案的內容;如果在每乙個地方都建立乙個config物件的例項,那麼就會在系統中存在多個config的例項物件,這樣會嚴重浪費記憶體資源,尤其是在配置檔案內容較多的情況下。而我們的意願是在程式執行期間只存在乙個例項物件就好。

__new__與__init__的區別:

__new__:建立例項物件時呼叫的構造方法

__init__:初始化方法,用於設定例項的相關屬性

python建立例項時,會先呼叫__new__構造方法,然後使用__init__進行例項初始化。

我們可以通過__new__來影響例項的建立,從而實現單例.

class singleton(object):

def __new__(cls,*args,**kwargs):

if not hasattr(cls,"_instance"):

cls._instance=super(singleton,cls).__new__(cls,*args,**kwargs)

return cls._instance

class myclass(singleton):

a=1one=myclass()

two=myclass()

print (one==two)

print (id(one),id(two))

def singleton(cls):

instance={}

def get_instance(*args,**kw):

if cls not in instance:

instance[cls]=cls(*args,**kw)

return instance[cls]

return get_instance

@singleton

class myclass(object):

pass

a=myclass()

b=myclass()

print (a==b)

#print (id(a),id(b))

print (a)

print (b)

#在get_instance函式中判斷該類是否存在於instance字典中,若不存在,則建立該類例項並加入instance字典中,返回字典中該類的例項;若存在,則直接返回字典中該類的例項。

python設計模式 單例設計模式

樣式一 class musicplayer object instance none 設定類屬性,用來判斷是否有物件得到記憶體空間 init flag false 0表示還沒有初始化 1代表已經初始化 使用內建函式進行空間的分配 def new cls,args,kwargs cls 哪個類呼叫,就...

python 單例設計模式

windows系統中的 站,無論任何地方呼叫的 站都指向的是同乙個 站,站的屬性和方法會被重複呼叫,這樣容易產生衝突浪費資源,這種情況下,單例模式就是乙個很好的實現方法。python的設計模式主要有三大類 建立類設計模式 結構類設計模式 行為類設計模式 python與設計模式相關介紹 類是抽象的,先...

Python 單例設計模式

在記憶體中為物件分配空間 返回物件引用 python 直譯器獲得物件引用後,將引用的第乙個引數,傳遞給 new 方法 重寫 new 方法的 非常固定!重寫 new 方法一點要 return super new cls 否則 python的直譯器得不到分配了空間的物件引用,就不會呼叫物件的初始化方法 ...