• 单例模式


    单例模式是一种软件设计模式,大概有四种方法来实现。

    #  第一种方式,使用模块,
    #  mysingleton.py
    
    
    class My_Singleton(object):
        def foo(self):
            pass
    
    my_singleton = My_Singleton()
    
    
    #  第二种方式:使用__new__
    class Singleton(object):
        _instance = None
        def __new__(cls,*args,**kwargs):
            if not cls._instance:
                cls._instance = super(Singleton,cls).__new__(cls,*args,**kwargs)
            return cls._instance
    
    class MyClass(Singleton):
        a = 'adsgas'
    
    """
    >>> one = MyClass()
    >>> two = MyClass()
    >>> one == two
    True
    >>> one is two
    True
    >>> id(one), id(two)
    (4303862608, 4303862608)
    """
    
    #  第三种方法:使用装饰器
    from functools import wraps
    
    def singleton(cls):
        instances = {}
        @wraps(cls)
        def getinstance(*args,**kwargs):
            if cls not in instances:
                instances[cls]= cls(*args,**kwargs)
            return instances[cls]
    
    @singleton
    class MyClass(object):
        a = 'dasdas'
    
    
    #  使用metaclass,原类实现单例模式
    
    class Singleton(type):
        _instances = {}
        def __call__(cls,*args,**kwargs):
            if cls not in cls._instances:
                cls._instances[cls] = super(Singleton,cls).__call__(*args,**kwargs)
            return cls._instances[cls]
        
    class MyClass(metaclass=Singleton):
        pass
  • 相关阅读:
    从Python到Web开发
    源码安装缺少configure文件
    5
    4
    3
    2
    42
    1
    18
    41
  • 原文地址:https://www.cnblogs.com/zhang-can/p/7717477.html
Copyright © 2020-2023  润新知