Python中利用裝飾器實現單例模式

2021-09-12 12:58:55 字數 862 閱讀 3099

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 ...