单例模式

保证一个类只有一个实例,并提供一个访问它的全局访问点。

如 模块全局对象,其他场景如日志对象,数据库连接池

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

class MyClass(Singleton):
    def __init__(self, value):
        self.value = value

a = MyClass(10)
b = MyClass(20)

print(a.value)      # 20
print(b.value)      # 20
print(a is b)       # True

优点:

  • 对唯一实例的受控访问

  • 单例相当于全局变量,但防止了命名空间被污染

Last updated