from functools import wraps def singleton(cls): instance = None @wraps(cls) def wrap(*args,**kwargs): nonlocal instance if instance is None: instance = cls(*args,**kwargs) #args,kwargs是用于将参数传递到__init__中 return instance return wrap @singleton class A: pass a = A() a1 = A() id(a) id(a1)
注:
可以看到无论有多少个实例,都是共享一个地址
原理:
在实例化类之前,先判断此类是否已经被实例化过(通过instance是否为空判断),如果已经实例化过则直接返回已经实例化的类,如果没有被实例化过,则进行实例化
总结:
装饰器也可以用到类上面
本文出自 “激情燃烧的岁月” 博客,请务必保留此出处http://liuzhengwei521.blog.51cto.com/4855442/1895120
原文:http://liuzhengwei521.blog.51cto.com/4855442/1895120