单例模式

复制代码
python实现单例模式
在Python中实现单例模式可以通过装饰器、元类或者直接在类中实现。以下是一个使用装饰器实现的单例模式示例:

def singleton(cls):
    instances = {}
    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance
 
@singleton
class MySingleton:
    def __init__(self, param):
        self.param = param
        # 其他初始化代码
 
# 使用单例
a = MySingleton("example")
b = MySingleton("example")
 
# a和b将指向同一个对象,因为MySingleton是单例的
print(a is b)  # 输出 True
这个装饰器singleton会创建一个字典instances来存储类的实例。每次尝试创建类的实例时,它都会检查该类是否已经在instances中。如果不在,它会创建一个新的实例并将其存储在字典中,然后返回这个实例。这确保了无论你创建多少次类的实例,它们都将是同一个对象。