python单例模式的装饰器

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)

wKiom1iXNNqTkg9fAAAT07myMpY808.png

注:python

    能够看到不管有多少个实例,都是共享一个地址ide

原理:get

    在实例化类以前,先判断此类是否已经被实例化过(经过instance是否为空判断),若是已经实例化过则直接返回已经实例化的类,若是没有被实例化过,则进行实例化
it

总结:io

    装饰器也能够用到类上面
class

相关文章
相关标签/搜索