python中裝飾器用在類上面,可以攔劫該類例項物件的建立,因此可以管理該類建立的所有例項,因此利用該特點可以實現單例模式。
具體**如下:
def singleton(aclass):
instance = none
def oncall(*args):
nonlocal instance
if instance == none:
instance = aclass(*args)
return instance
return oncall
這裡利用nonlocal使得巢狀函式可以訪問其外部函式的區域性變數,進而為每乙個類儲存乙個狀態變數。
使用如下:
@singleton
class student:
def __init__(self,name,age):
self.name = name
self.age = age
s1 = student('robert smith',30)
s2 = student('lebron james',34)
s1.age
out[111]: 30
s1.name
out[112]: 'robert smith'
id(s1)
out[113]: 148263656
s2.age
out[114]: 30
s2.name
out[115]: 'robert smith'
id(s2)
out[116]: 148263656
Python中利用函式裝飾器實現備忘功能
備忘 code.google 有一項能夠加速大型複雜函式的簡單技術叫做備忘 memoization 這是某種形式的快取。當每次呼叫函式時,乙個備忘函式會在table中儲存被調函式的輸入引數以及返回值。如果這個函式以同樣的輸入引數被再次呼叫時,它返回的就是儲存在table中的值而不需要再次進行計算。c...
python裝飾器實現單例模式
基本思想為 1 在裝飾器中新增乙個字典型別的自由變數 instance 2 在閉包中判斷類名是否存在於 instance中,如果不存在則建立乙個類的事例,並講其新增到字典中 如果存在則不進行例項化,直接返回字典中的例項 def singleton cls instance def singleton...
Python裝飾器實現單例模式
coding utf 8 使用裝飾器 decorator 這是一種更pythonic,更elegant的方法,單例類本身根本不知道自己是單例的,因為他本身 自己的 並不是單例的 def singleton cls,args,kw instances def singleton if cls not ...