【发布时间】:2012-11-27 04:11:46
【问题描述】:
可能重复:
Is there a simple, elegant way to define Singletons in Python?
我有以下示例代码,其中我从 Singleton 派生了一个类(希望是一个):
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = object.__new__(cls, *args, **kwargs)
return cls._instance
class Tracer(Singleton):
def __init__(self):
print "Init"
a = Tracer()
b = Tracer()
你试一试,你会看到Tracer的__init__方法又被调用了。让另一个实例引用原始实例不是有一个单例吗?我不想再次运行__init__ 方法,因为它可能会覆盖以前的信息。也许单例是错误的或者它正在使用?
【问题讨论】:
-
为什么需要单例?只需要一个模块级别的全局变量,您可以为它分配一个实例并用下划线命名该类,这样人们就知道不要实例化它。
-
我更喜欢单例来依赖实现。我不想依赖“了解”任何人的惯例的人。
-
@Alex 任何尝试使用您的代码的人都不会认为它是一个单例,当他们尝试创建多个实例时会导致混乱。无论哪种方式,您都需要解释,我认为单身人士不太清楚,而且工作量更大。
-
当然,您可能根本不需要课程。模块级常量可能就是您想要的。