有人可以告诉我为什么这是不正确的单例模式:
class preSingleton(object):
def __call__(self):
return self
singleton = preSingleton()
# singleton is actually the singleton
a = singleton()
b = singleton()
print a==b
a.var_in_a = 100
b.var_in_b = 'hello'
print a.var_in_b
print b.var_in_a
编辑: 上面的代码打印:
True
hello
100
非常感谢
第二部分
也许这样更好?
class Singleton(object):
def __new__(cls):
return cls
a = Singleton()
b = Singleton()
print a == b
a.var_in_a = 100
b.var_in_b = 'hello'
print a.var_in_b
print b.var_in_a
编辑: 上面的代码打印:
True
hello
100
再次感谢。
最佳答案
在 Python 中创建单例实际上非常简单。诀窍是让模块为您进行封装而不是创建类。
- 模块只会被初始化一次
- 模块只有在第一次导入时才会被初始化
- 任何重新导入模块的尝试都将返回指向现有导入的指针
如果你想假装模块是一个类的实例,你可以这样做
import some_module
class SomeClass(object):
def __init__(self):
self.singleton = some_module
关于Python单例模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3037914/