美文网首页
python单例模式

python单例模式

作者: nice生活 | 来源:发表于2018-11-06 14:10 被阅读0次

    单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

    __new__()在__init__()之前被调用,用于生成实例对象。利用这个方法和类的属性的特点可以实现设计模式的单例模式。单例模式是指创建唯一对象,单例模式设计的类只能实例 一次

    使用__new__方法

    
    class Single:
    
        def __new__(cls, *args, **kw):
            if not hasattr(cls, "_instance"):
                cls._instance = super().__new__(cls, *args, **kw)
            return cls._instance
    
    
    class MyClass(Single):
        a = 1
    
    
    print(MycClass() == MycClass())
    #true
    

    使用元类

    class Single(type):
        _instances = {}
    
        def __call__(cls, *args, **kwargs):
            if cls not in cls._instances:
                cls._instances[cls] = super().__call__(*args, **kwargs)
            return cls._instances[cls]
    
    class MyClass(metaclass=Single):
        a = 1
    

    装饰器

    def single(cls):
        instances = {}
        def getinstance(*args, **kw):
            if cls not in instances:
                instances[cls] = cls(*args, **kw)
            return instances[cls]
        return getinstance
    
    @single
    class MyClass:
      ...
    

    使用模块

    # single.py
    class Single(object):
        def foo(self):
            pass
    
    my_single = Single()
    
    # to use
    from single import my_single
    
    my_single.foo()
    

    相关文章

      网友评论

          本文标题:python单例模式

          本文链接:https://www.haomeiwen.com/subject/wlgfxqtx.html