python 類的單例模式的實現

2021-09-24 09:47:58 字數 1526 閱讀 8865

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.在寫 之前,先理解乙個概念...