python - 单例模式

类每次实例化的时候都会创建一个对象,如果要类每次实例化的时候只创建一个对象,那么就可以用单例模式

 

class MyClass(object):
    instance = None
    def __new__(cls, *args, **kwargs):
        if not cls.instance:
            cls.instance = object.__new__(cls)
            return cls.instance
        else:
            return cls.instance

myclass = MyClass()
myclass.name = 'lalala'
print(myclass.name)
myclass2 = MyClass()
# myclass2 没有name属性,但也能调用,因为这个类是单例模式
print(myclass2.name)


结果:
lalala
lalala

 

 

用装饰器实现单例模式

def single(cls):
    # 用装饰器实现的单例模式需要保证每一个类调用都能变成单例模式
    # 因此创建一个字典来保存需要变成单例模式的那些类
    instance = {}

    def fun(*args, **kwargs):
        # cls即传入的方法,也就是传入的类;当类名不在字典里的时候,说明没有实例化,那就帮它实例化一次
        if cls not in instance:
            instance[cls] = cls(*args, **kwargs)
            return instance[cls]
        else:
            return instance[cls]

    return fun


@single
class Test:
    pass


t = Test()

 

posted @ 2020-12-05 11:58  mkay  阅读(72)  评论(0编辑  收藏  举报