Python如何實現單例模式

2021-09-28 12:18:21 字數 1781 閱讀 4069

單例模式(singleton pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。

單例設計模式介紹:

參考:實現方法:將需要實現的單例功能放到乙個.py 檔案中

實現原理:python 的模組就是天然的單例模式,因為模組在第一次匯入時,會生成.pyc檔案,當第二次匯入時,就會直接載入.pyc檔案,而不會再次執行模組**。因此,我們只需把相關的函式和資料定義在乙個模組中,就可以獲得乙個單例物件了。

mysingleton.py

class singleton(object):

def foo(self):

pass

singleton = singleton()

將上面的**儲存在檔案mysingleton.py中,要使用時,直接在其他檔案中匯入此檔案中的物件,這個物件即是單例模式的物件

from a import singleton
def singleton(cls):

_instance = {}

def _singleton(*args, **kargs):

if cls not in _instance:

_instance[cls] = cls(*args, **kargs)

return _instance[cls]

return _singleton

@singleton

class a(object):

a = 1

def __init__(self, x=0):

self.x = x

a1 = a(2)

a2 = a(3)

我們知道,當我們例項化乙個物件時,是先執行了類的__new__方法(我們沒寫時,預設呼叫object.__new__),例項化物件;然後再執行類的__init__方法,對這個物件進行初始化,所有我們可以基於這個,實現單例模式

參考:

class singletontype(type):

def __init__(self,*args,**kwargs):

super(singletontype,self).__init__(*args,**kwargs)

def __call__(cls, *args, **kwargs): # 這裡的cls,即foo類

print('cls',cls)

obj = cls.__new__(cls,*args, **kwargs)

cls.__init__(obj,*args, **kwargs) # foo.__init__(obj)

return obj

class foo(metaclass=singletontype): # 指定建立foo的type為singletontype

def __init__(self,name):

self.name = name

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

return object.__new__(cls)

obj = foo('xx')

python如何實現單例模式

單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。在 python 中,我們可以用多種方法來實現單例模式 其實,python 的模組就是天然的單例模式,因為模組...

python實現單例模式

最近在寫乙個連線池,而連線池管理類不可避免的需要使用單例來保證所有使用者在取得連線時取到的一定是同乙個管理物件。故將此模式取來研究一番。保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點 設計模式 單例模式是全域性只有乙個訪問點,故對於乙個類來說,任何例項化後訪問到的都應該是同樣的物件。而也有另...

Python 實現單例模式

encoding utf 8 print 方法1 方法1,實現 new 方法 並在將乙個類的例項繫結到類變數 instance上,如果cls.instance為none說明該類還沒有例項化過,例項化該類,並返回 如果cls.instance不為none,直接返回cls.instance class ...