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
  • 相关阅读:
    linux 下ip命令对比ifconfig命令
    Redis使用详细教程
    shell中eval命令
    在Ubuntu 14.04 上安装 FTP 服务
    这本将shell的书应该不错
    linux sh 脚本调用外部命令
    c语言char 和int的问题
    ubuntu网卡ip的配置
    js中获取时间new date()的用法
    react 组件之间的通信
  • 原文地址:https://www.cnblogs.com/tangpg/p/9012659.html
Copyright © 2011-2022 走看看