Python中的Singleton Pattern在UML中两次创建相同的变量

时间:2017-08-28 10:30:46

标签: python singleton pycharm

我在Python中创建了一个单例模式,但如果我创建了一个UML,我会在图中返回一个两次__instance变量的UML。

但我不知道为什么会这样。

#Singleton
    __instance=None

    def __new__(cls):
        if HeatingStateOn.__instance is None:
             HeatingStateOn.__instance = object.__new__(cls)
        return HeatingStateOn.__instance

为什么会发生这种情况,我的代码中出现了什么错误?

enter image description here

更新

我运行以下单元测试,结果为绿色。

 def test_heatingStateOn_singleton(self):
        a = HeatingStateOn()
        b = HeatingStateOn()
        self.assertEqual(a, b)

enter image description here

1 个答案:

答案 0 :(得分:0)

我测试了你的代码,并检查了实例的id,实际上只有一个__instance。请检查以下代码:

class HeatingStateOn:
    __instance = None

    def __new__(cls):
        if HeatingStateOn.__instance is None:
            HeatingStateOn.__instance = object.__new__(cls)
        return HeatingStateOn.__instance


a = HeatingStateOn()
b = HeatingStateOn()
print(id(a))
print(id(b))

a的id与b的id相同,这意味着a和b共享相同的内存。