简单的三种单例模式

单利模式是 软件设计模式

主要目的是确保某一个类只有一个实例存在

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
原文地址:https://www.cnblogs.com/tangpg/p/9012659.html