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

时间:2018-11-23 02:43:28

标签: 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.__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

代码哪里出问题了?

1 个答案:

答案 0 :(得分:2)

每次调用A()时,都会调用其__init__,因为它是一个单例,因此在同一对象上两次调用__init__()方法。 您可以通过以下方式获得预期的结果:

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