什么时候在python中使用Singleton?

Ale*_*lex 6 python singleton instance python-2.7

关于在python中使用Singleton模式有很多问题,尽管这个问题可能会重复已经讨论过的许多方面,但我还没有找到以下具体问题的答案.

让我们假设我有一个类MyClass,我只想实例化一次.在python中,我可以在代码中执行以下操作myclass.py:

class MyClass(object): 
    def foo(self):
        ....


instance = MyClass()
Run Code Online (Sandbox Code Playgroud)

然后在任何其他程序中我可以简单地引用实例

import myclass
myclass.instance.foo()
Run Code Online (Sandbox Code Playgroud)

在什么情况下这种方法足够了?在什么情况下使用Singleton模式有用/强制?

Mic*_*yan 7

单身模式通常是方便而非要求.Python与其他语言略有不同,因为与其他语言相比,在测试中模拟单例非常容易(只是破坏了全局变量!),但在创建单例时要问自己是个好主意:我这样做是为了方便还是因为只有一个实例是非常必要的?未来可能会有不止一个吗?

如果创建一个实际上只构造一次的类,那么将状态作为模块的一部分并将其方法转换为模块级函数可能更有意义.如果将来某个实例的假设有可能发生变化,那么通过单例实例通常要好得多,而不是通过全局名称引用单例.

例如,您可以通过这种方式轻松实现"单例":

if __name__ == '__main__':
   instance = MyClass()
   doSomethingWith(instance)
Run Code Online (Sandbox Code Playgroud)

在上面,"实例"是单例,因为它只构造了一次,但处理它的代码是提供实例而不是引用module.instance,这使得在某些将来重用代码片段更容易情况,你需要不止一个MyClass.