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)
注:python
能够看到不管有多少个实例,都是共享一个地址ide
原理:get
在实例化类以前,先判断此类是否已经被实例化过(经过instance是否为空判断),若是已经实例化过则直接返回已经实例化的类,若是没有被实例化过,则进行实例化
it
总结:io
装饰器也能够用到类上面
class