单利模式是 软件设计模式
主要目的是确保某一个类只有一个实例存在
1.python的模块就是天然的单例,因为模块在第一次导入时,会生成 一个后缀.pyc
文件,当第二次导入时,就会直接加载 .pyc
文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,再去导入。导入的对象则为单例
2.__new__方法
class SingCase: """ 单例 """ def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): cls._instance = super(SingCase, cls).__new__(cls, *args, **kwargs) return cls._instance class A(SingCase): pass a1 = A() a2 = A() a3 = A() # a1 is a2 is a3
3.装饰器方法
def singLeton(cls): _instance = {} def _singleton(*args, **kwargs): if cls not in _instance: # 传入的类被第一调用时,字典键名 cls 没有在_instance字典里,第一次之后调用就存在了 _instance[cls] = cls(*args, **kwargs) return _instance[cls] # 返回值为cls(*args, **kwargs) return _singleton @singLeton class A: pass a1 = A() a2 = A() a3 = A() print(a1 is a2 is a3) # True