什么是单例设计模式?

单例:单个对象/实例
程序在运行过程中,确保一个类只能创建一个对象,之后不管在程序的哪个地方获取该类的对象,获取到的都是同一个对象
使用场景:商品仓库等,import导入模块就是一个单例设计模式,每个模块只能被导入一次

使用类属性实现单例设计模式

# 类属性实现单例设计模式
class A(object):
    # 定义类属性
    __instance = None

    # 重写构造函数__new__
    def __new__(cls, *args, **kwargs):
        # 第一次创建对象
        if cls.__instance is None:
            cls.__instance = super().__new__(cls)
        # 之后每次返回第一次创建的对象
        return cls.__instance


a1 = A()
a2 = A()
print(a1 is a2)

True

使用装饰器实现单例设计模式

# 定义装饰器
def singleton(cls):
    # 定义局部变量表示对象,默认为None
    instance = None

    def inner(*args, **kwargs):
        nonlocal instance
        # 判断对象是否存在,不存在则创建对象
        if instance is None:
            instance = cls(*args, **kwargs)
        # 存在就返回该对象
        return instance

    return inner

True