我正在尝试在python中创建一个单例类。 我在Stackoverflow中的一个示例中找到了如下所示
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
print "New called"
if cls._instance:
return cls._instance
cls._instance = super(Singleton, cls).__new__(
cls, *args, **kwargs)
return cls._instance
if __name__ == '__main__':
s1=Singleton()
s2=Singleton()
if id(s1)==id(s2):
print "Same"
else:
print "Different"
print id(s1)
print id(s2)
到目前为止它很好,它给了我一个单身,但当我用
制作一个对象时s3 = object.__new__(Singleton)
它给了我一个全新的对象。 每当我通过 object .__ new __(Singleton)创建一个实例时,它会给我一个新实例。
它没有调用Singleton类的 new 方法来创建一个新对象。 我的问题是如何创建一个单独的单元,它可以同时使用s1 = Singleton()和s3 = object。 new (Singleton)
答案 0 :(得分:0)
你明确地说object.__new__
,你想使用对象的新方法而不是Singleton的新方法。那么为什么有人会使用这种方法来创建Singleton
?
答案 1 :(得分:0)
object.__new__()
与YourClass.__new__()
当您致电YourObject
时,_instance会添加到您的YourObject
,并设置为None
(请记住它是静态的)。
但是,当您致电object.__new()
时,名为object
的{{1}}中不存在任何变量,因此当您致电_instance
时,会为其分配YourObject
。简而言之:当您使用None
类的__new__
时,您的__instance逻辑未被检查。
object