开发者社区> 问答> 正文

python如何实现单例模式?写出两种实现方式?

python如何实现单例模式?写出两种实现方式?

展开
收起
珍宝珠 2019-11-11 11:27:40 3119 0
2 条回答
写回答
取消 提交回答
  • 补充楼下:

    使用模块:原理,python会生成pyc文件给解释器,解释执行。 所以模块的实例只会有一个。

    image.png

    在模块中实例化。

    2019-11-11 15:37:01
    赞同 展开评论 打赏
  • 第一种方法:使用装饰器

    def singleton(cls):
        instances = {}
        def wrapper(*args, **kwargs):
            if cls not in instances:
                instances[cls] = cls(*args, **kwargs)
            return instances[cls]
        return wrapper
        
        
    @singleton
    class Foo(object):
        pass
    foo1 = Foo()
    foo2 = Foo()
    print(foo1 is foo2)  # True
    

    第二种方法:使用基类 New 是真正创建实例对象的方法,所以重写基类的new 方法,以此保证创建对象的时候只生成一个实例

    class Singleton(object):
       def __new__(cls, *args, **kwargs):
           if not hasattr(cls, '_instance'):
               cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
           return cls._instance
       
       
    class Foo(Singleton):
       pass
    
    foo1 = Foo()
    foo2 = Foo()
    
    print(foo1 is foo2)  # True
    
    2019-11-11 13:04:13
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载