美文网首页python你应该知道
python中实现单例模式的几种方法

python中实现单例模式的几种方法

作者: 斑纹长颈鹿 | 来源:发表于2017-12-09 21:30 被阅读0次

    1.装饰器

    
    def singleton(cls):
        instances = {}
        def getinstance(*args,**kw):
            if cls not in instances:
                instances[cls] = cls(*args, **kw)
            return instances[cls]
        return getinstance
    
    @singleton
    class MyClass:
        def __init__(self,s):
            self.s = s
    
    a = MyClass('apple')
    b = MyClass('banana')
    
    print(a.s)
    print(b.s)
    输出:
    apple
    apple
    

    当一个类名不在字典内时,创建这个类的实例并作为值对应类名这个键,创建一个键值对在 instances 字典内,以后创建这个类的实例时,因为类名已存在,返回的还是第一次创建的类的实例。

    2.模块

    python中的模块module在程序中只被加载一次,本身就是单例的。

    # mysingleton.py
    class My_Singleton(object):
        def foo(self):
            pass
    
    my_singleton = My_Singleton()
    
    # to use
    from mysingleton import my_singleton
    
    my_singleton.foo()
    

    3. __new__()

    class Singleton(object):
        def __new__(cls, *args, **kw):
            if not hasattr(cls, '_instance'):
                cls._instance = super(Singleton,cls).__new__(cls)
            return cls._instance
    
    class MyClass(Singleton):
        def __init__(self,s):
                self.s = s
    a = MyClass('apple')
    b = MyClass('banana')
    输出都是 banana
    

    通过__new__方法,将类的实例在创建的时候绑定到类属性 _instance上。如果 cls._instanceNone,说明类还未实例化,实例化并将实例绑定到 cls._instance,以后每次实例化的时候都返回第一次实例化创建的实例。

    以上是我了解的方法,如果还有其他方法可以告知我,我来加上去

    相关文章

      网友评论

        本文标题:python中实现单例模式的几种方法

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