Python3:类变量列表中其他类的回调

问题描述 投票:0回答:1

嘿.

所以我得到了这个“数据”类,其中包含一个字典,该字典具有修改其内容的功能。 我有 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 两次...

>
>

我错过了什么? 或者有更好的方法来做这件事吗? :)

谢谢。

python python-3.x class callback singleton
1个回答
0
投票

答案在这里:https://stackoverflow.com/a/6255101/9525238

问题是我的回调列表在 init 中,而不是在类本身中定义,所以它在每个实例之后重新创建。

之前:

class MyDataClass:
    def __init__(self):
        self.callbacks = []

之后:

class MyDataClass:
    callbacks = []
    def __init__(self):
        pass
© www.soinside.com 2019 - 2024. All rights reserved.