有人可以告诉我为什么这是不正确的单例模式:
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再次感谢。
发布于 2010-06-21 12:04:48
在Python中,单例实际上非常简单。诀窍是让模块为您进行封装,而不是创建一个类。
的指针。
如果要假装模块是类的实例,则可以执行以下操作
import some_module
class SomeClass(object):
def __init__(self):
self.singleton = some_module发布于 2010-06-14 14:17:56
因为这不是单身。Singleton必须是单身,您的对象不是。
>>> class preSingleton(object):
... def __call__(self):
... return self
...
>>> singleton = preSingleton()
>>> singleton2 = preSingleton()
>>> singleton
<__main__.preSingleton object at 0x00C6D410>
>>> singleton2
<__main__.preSingleton object at 0x00C6D290>发布于 2010-06-14 14:49:58
这实际上是Borg模式。多个共享状态的对象。
这并不是说它有什么问题,而且对于大多数(如果不是全部的话)用例来说,它在功能上等同于单个实例,但是既然您要求.
编辑:当然,因为它们是Borg对象,每个实例都会消耗更多的内存,所以如果您要创建大量内存,这将对资源的使用产生影响。
https://stackoverflow.com/questions/3037914
复制相似问题