下面的幾種方法不是我原創的。看大神的帖子,自己敲出來驗證下,寫出來作為學習筆記記錄下
第一種,修飾器方法
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...