python 单例模式

# __new__

class Demo:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls,'_instance'):
            cls._instance=super().__new__(cls)
        return cls._instance

a=Demo()
b=Demo()
print(id(a),id(b))

 


# 元类 type

class Demo(type):
    def __init__(cls,*args,**kwargs):
        cls._instace=None
        super().__init__(*args,**kwargs)

    def __call__(cls, *args, **kwargs):
        if cls._instace is None:
            cls._instace=super().__call__(*args,**kwargs)
        return cls._instace

class D(metaclass=Demo):
    pass
a=D()
b=D()
print(a is b)

# 装饰器
def demo(cls):
    instance={}
    def g_instance(*args,**kwargs):
        if cls not in instance:
            instance[cls]=cls(*args,**kwargs)
        return instance[cls]
    return g_instance


@demo
class D:
    pass

a=D()
b=D()
print(a is b)

 

 

 

posted on 2021-06-17 15:31  HHMLXL  阅读(46)  评论(0)    收藏  举报

导航