为什么在使用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()
返回不同的值?风是第一个实例。为什么它不是真正的风呢,