• Python单例模式的四种方法


    在这之前,先了解_new__()方法

    __new__方法:

    a.是在实例创建之前被调用的

    b.它的任务就是创建实例然后返回该实例,是个静态方法

     总结:

          __new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供

          __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例

          __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值

          我们可以将类比作制造商,__new__方法就是前期的原材料购买环节,__init__方法就是在有原材料的基础上,加工,初始化商品环节

    下面为四种实现单例模式的方法

    1. 使用__new__方法

    class MyClass:
        _instance = None
    
        def __new__(cls, *args, **kwargs):
            if not cls._instance:
                cls._instance = super().__new__(cls)
            return cls._instance
    
        def __init__(self, var1, var2):
            self.var1 = var1
            self.var2 = var2
    

    2.共享属性

    # 创建实例时把所有实例的__dict__指向同一个字典,这样它们都具有相同的属性和方法(类的__dict__存储对象属性)
    class Singleton(object):
        _state = {}
        def __new__(cls, *args, **kwargs):
            ob = super(Singleton,cls).__new__(cls, *args, **kwargs)
            ob.__dict__ = cls._state
        return ob
    
    class B(Singleton):
        pass
    
    # 类B即为单例类
    

    3.使用装饰器

    def singleton(cls):
        instance = {}
        def wapper():
            if cls not in instance:
                instance[cls] = cls(*args, **kwargs)
            return instance[cls]
        return wapper
    
    @singleton
    class C:
        pass
    
    # 类C即为单例类
    

    4.import方法

    # 作为Python模块时是天然的单例模式
    
    #创建一个sington.py文件,内容如下:
        class Singleton(object):
            def foo(self):
                pass
        mysington = Singleton()
    
    # 运用
    from sington import mysington
    mysington.foo()
    
  • 相关阅读:
    coolSQL安装与使用
    测试经验--测试流程总结
    测试经验--测试用例结构设计
    python 爬虫与数据可视化--数据提取与存储
    python 爬虫与数据可视化--爬虫基础知识
    在Eclipse中用TODO标签管理任务(Task)
    Web性能优化:图片优化
    Firebug入门指南
    Git远程操作详解
    Firebug控制台详解
  • 原文地址:https://www.cnblogs.com/zhouxiaoming123/p/12049929.html
Copyright © 2020-2023  润新知