Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在使用python单例模式时只实现最后一个实例_Python_Singleton - Fatal编程技术网

为什么在使用python单例模式时只实现最后一个实例

为什么在使用python单例模式时只实现最后一个实例,python,singleton,Python,Singleton,代码如下所示: class A(object): __instance = None def __new__(cls, *args, **kwargs): if cls.__instance is None: cls.__instance = object.__new__(cls) return cls.__instance else: return cls.__instan

代码如下所示:

class A(object):
    __instance = None

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance

    def __init__(self, book):
        self.book = book

    def pr(self):
        print(self.book)


if __name__ == "__main__":
    b = A("wind")
    a = A("good")
    print(a is b)
    print(a.pr())
    print(b.pr())
结果是 True good None good None 真的 好的 没有一个 好的 没有一个 为什么结果不是:

True wind good 真的 风 好的
代码哪里有问题?

对于每次调用
A()
,它的
\uuuu init\uuuu
将被调用,因为它是一个单例,在同一个对象上调用了两次
\uuuu init\uuuuu()
方法。 您可以通过以下方式获得预期结果:

b = A("wind")
b.pr()
a = A("good")
a.pr()
print(a is b)

对于每次调用
A()
,它的
\uuuu init\uuuu
都将被调用,因为它是一个单例,在同一个对象上调用了两次
\uuu init\uuuu()
方法。 您可以通过以下方式获得预期结果:

b = A("wind")
b.pr()
a = A("good")
a.pr()
print(a is b)

a
b
应该如何
pr()
返回不同的值?风是第一个实例。为什么它不
True wind wind
,它
a
b
应该如何
pr()
返回不同的值?风是第一个实例。为什么它不是真正的风呢,