zoukankan      html  css  js  c++  java
  • 简单的三种单例模式

    单利模式是 软件设计模式

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

    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
  • 相关阅读:
    前端请求跨域理解
    可视化交互行为
    文章标题
    在map上标记point
    基于force布局的map
    stack布局
    python一些特有语法
    histogram布局用法
    patition布局
    Shell命令行处理JSON
  • 原文地址:https://www.cnblogs.com/tangpg/p/9012659.html
Copyright © 2011-2022 走看看