嘿.
所以我得到了这个“数据”类,其中包含一个字典,该字典具有修改其内容的功能。 我有 2 个小部件,我想在数据更改时更新它们。 可以从“widget1”或外部调用(其他地方)更改数据
但是每当它发生变化时(红色箭头),我需要调用小部件来更新和显示新数据(蓝色箭头)。
所以我试图让这个“数据”类成为单例:
def __new__(cls):
if not hasattr(cls, "instance"):
cls.instance = super(MyDataClass, cls).__new__(cls)
print(cls.instance)
return cls.instance
(这似乎确实有效,因为打印语句两次返回相同的地址)
然后每个小部件可以在列表中添加它的单独回调:
def addCallbackFunction(self, f):
self.callbacks.append(f)
def _callCallbackFunctions(self):
for f in self.callbacks:
f()
但是当我创建第二个实例时,回调列表(self.callbacks)是空的。并且只显示第二次回调。
编辑:澄清我在小部件中做什么:
class Widget1():
def __init__():
self.data = MyDataClass()
self.data.addCallbackFunction(self.callback1)
def callback1():
print("x")
class Widget2():
def __init__():
self.data = MyDataClass()
self.data.addCallbackFunction(self.callback2)
def callback2():
print("y")
我的期望是来自“data”类的 self.callbacks 包含 callback1 和 callback2...但它似乎只包含 callback2 两次...
我错过了什么? 或者有更好的方法来做这件事吗? :)
谢谢。
答案在这里:https://stackoverflow.com/a/6255101/9525238
问题是我的回调列表在 init 中,而不是在类本身中定义,所以它在每个实例之后重新创建。
之前:
class MyDataClass:
def __init__(self):
self.callbacks = []
之后:
class MyDataClass:
callbacks = []
def __init__(self):
pass