驗證python3實現單例模式的幾種方法

2021-07-29 23:19:40 字數 1869 閱讀 7920

下面的幾種方法不是我原創的。看大神的帖子,自己敲出來驗證下,寫出來作為學習筆記記錄下

第一種,修飾器方法

def deco1(func):

"""裝飾器方法,

:param func:被修飾函式

:return:返回計算結果

"""list1={}

def _deco1(*args, **kwargs):

if func not in list1:

list1[func] = func(*args, **kwargs)

return list1[func]

return _deco1

可以用來修飾函式

@deco1

def myfunc():

print("myfunc called.")

myfunc()

或者類

@deco1

class myclass2:

def __init__(self):

self.xx = 0

def getval(self):

return self.xx

def setval(self, val):

self.xx = val

a = myclass2()

a.setval(2)

b = myclass2()

print("b=",b.getval())

第二種方法,元類方式。

class singleton1(type):

_inst = {}

def __call__(self, *args, **kw):

if self not in self._inst:

self._inst[self] = super(singleton1, self).__call__(*args, **kw)

return self._inst[self]

python3中的使用方式

class myclass1(metaclass = singleton1):

def __init__(self):

self.xx = 0

def getval(self):

return self.xx

def setval(self, val):

self.xx = val

python2中的使用方式

class myclass1:

__metaclass__ = singleton1

def __init__(self):

self.xx = 0

def getval(self):

return self.xx

def setval(self, val):

self.xx = val

第三種方法,利用import只匯入一次。python模組就是天然的單例模式。

class my_singleton(object):

def foo(self):

pass

my_singleton = my_singleton()

#這樣來使用

from mysingleton import my_singleton

my_singleton.foo()

還有幾種目前沒搞太清楚。後面搞清楚了再補充。

python3單例模式

單例模式是某個類在整個系統中只存在乙個例項的一種設計模式。使用單例模式的好處 單例模式不僅可以減少記憶體資源占用,而且因為只初始化一次,還可以加快執行效能。例如當程式通過乙個類來讀取配置資訊,而程式多個地方需要使用配置資訊,這時整個程式執行過程中只需乙個例項物件即可,可減少占用記憶體資源,同時還可以...

Python3 單例模式問題

單例模式,也叫單子模式,是一種常用的軟體設計模式,屬於建立型模式的一種。在應用這個模式時,單例物件的類必須保證只有乙個例項存在。許多時候整個系統只需要擁有乙個的全域性物件,這樣有利於我們協調系統整體的行為。比如在某個伺服器程式中,該伺服器的配置資訊存放在乙個檔案中,這些配置資料由乙個單例物件統一讀取...

Python3之實現單例模式de幾種方式

使用模組 使用 new 使用裝飾器 使用元類 python 的模組就是天然的單例模式,因為模組在第一次匯入時,會生成 pyc 檔案,當第二次匯入時,就會直接載入 pyc 檔案,而不會再次執行模組 class singleton def new cls,args,kwargs ifnot hasatt...