Python单例–装饰器实现方式
def singleton(cls):
instances = {}
def _singleton(*args, **kwargs):
# 创建字典保存被装饰类的实例对象
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return _singleton
class A(object):
def __init__(self, a):
self.a = a
if __name__ == '__main__':
A = singleton(A)
a1 = A(1)
a2 = A(2)
print(id(a1), id(a2))
问1:什么是单例?
答:就是一个类只能创建出唯一的实例
问2:给出一个Pytion中单例
答:Python中实现单例有很多种方式,上面给出的是装饰器方式实现的单例。
A = singleton(A),可以包装成语法糖,也就是@singleton,用@singleton修改类A
def singleton(cls):
instances = {}
def _singleton(*args, **kwargs):
# 创建字典保存被装饰类的实例对象
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return _singleton
@singleton
class A(object):
def __init__(self, a):
self.a = a
if __name__ == '__main__':
a1 = A(1)
a2 = A(2)
print(id(a1), id(a2))