Python中利用装饰器实现单例模式
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