python–類的單例模式的實現
單例模式(singleton pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。
使用:1、在排程器的初始化__init__()中初始化類,則會是單例了
2、使用__new___ 設定。
1)new_ 本身用來初始化例項, 如果check 到記憶體中有初始化的例項則直接返回記憶體位址。
2) 如果check到沒有例項化的例項則呼叫父類的__new__重新進行初始化例項, 之所以說呼叫父類的__new__,是因為我們實際上是過載了object的__new__
3)__new__的返回就是__init__中的self值
class singleton(object):
_instance = none
def __new__(cls, *args, **kw):
"""在下面的**中,我們將類的例項和乙個類變數 _instance 關聯起來,如果 cls._instance 為 none 則建立例項,否則直接返回 cls._instance。
在python中__new__方法與__init__方法類似,但是如果兩個都存在那麼__new__先執行。
:param args:
:param kw:
:return:
"""if not cls._instance:
cls._instance = super(singleton, cls).__new__(cls, *args, **kw)
return cls._instance
class myclass(singleton):
a = 1
3、 使用metaclass
元類(metaclass)可以控制類的建立過程,它主要做三件事:
攔截類的建立
修改類的定義
返回修改後的類
用元類實現單例模式的**如下:
class singleton1(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(singleton1, cls).__call__(*args, **kwargs)
return cls._instances[cls]
# python3
class myclass1(metaclass=singleton1):
pass
執行
if __name__ == '__main__':
one = myclass1()
two = myclass1()
print( id(one), id(two))
python元類單例 元類實現單例模式
python中的類也是物件。元類就是用來建立這些類 物件 的,元類就是類的類,你可以這樣理解為 myclass metaclass 元類建立 myobject myclass 類建立例項 實際上myclass就是通過type 來創建立出myclass類,它是type 類的乙個例項 同時myclass...
Python 單例模式的實現
單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保乙個類只有乙個例項物件。單例模式只生成乙個例項物件,減少了對系統資源的開銷,當乙個物件的產生需要較多的資源,如讀取配置檔案 產生其他依賴時,可以產生乙個 單例物件 然後永久駐留記憶體中,從而極大降低開銷。在...
python基礎 新式類實現單例模式
在網上看了有關python實現單例模式的部落格,發現好多都是 的,並且都是按照python2.x版本舊式類的方式寫的。雖然也能讀懂,但對於我這種一開始學的就是python3.x的新手來說,心裡總有點彆扭。所以今天我就把蒐集來的單例模式稍加修改一下,以新式類的方式寫下來。1.在寫 之前,先理解乙個概念...