2017-08-28 27 views
0

我在Python中创建了一个单例模式,但是如果我创建了这个UML,我会在图中返回一个带有两个时间变量0121的UML。Python中的单例模式在UML中创建两个相同的变量

但我不知道为什么会发生这种情况。

#Singleton 
    __instance=None 

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

为什么发生这种情况,我的代码中有什么错误?

enter image description here

UPDATE

我运行下面的单元测试,结果显示为绿色。

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

enter image description here

+0

你能告诉我们你是如何创建类的UML的?通过什么工具或命令 –

+0

我使用Intelij PyCharm的Diagramm功能。 –

+0

@ michael-mammut看起来像一个bug。您应该在PyCharm的错误跟踪器中打开一个错误。 – DeepSpace

回答

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)) 

的ID是与B相同的id,这意味着A和B共享相同的存储器。

+0

你好,我写了一个单元测试,并将它们添加到我的问题。测试是绿色的。这意味着单身人士的作品。 –

+0

但它没有解释,为什么'__instance'是列表中的两次。 –

+0

OP在运行时不会询问代码的行为。他们询问IDE的行为。 – DeepSpace

相关问题