python - 如何在变量更改时触发另一个对象中的函数。 Python

标签 python

据我所知,这就像一个观察者模式。 场景:一个 Center 对象保留了一个包含其所有客户端的列表(队列)。我正在使用 Twisted。

  1. 其中一个客户端对象更改中心对象中的变量或通知中心更改变量,
  2. 然后中心对象立即检测到变化
  3. 然后一旦检测到,中心对象调用队列中下一个对象的一些函数
  4. 客户端更改变量后,客户端对象将被消除。中心将处理下一个客户端对象。所以我想这些对象之间没有任何功能链。所以它与观察者模式有点不同。 (如何解决这个问题?如果我错了请纠正我。)

以下代码仅供演示:

    class client():
        def change(self):
            self.center.va = 1

        def inqueue(self):
            self.center.queue.enqueue(self)

        def function(self):
            pass

    class center():
        def __init__(self):
            self.queue = None
            self.va = 0

        ####  When the self.va changes, this func will be invoked
        def whenChanged(self):
            next = self.queue.dequeue()
            next.function()

最佳答案

va 设为属性。

class Center():
    def __init__(self):
        self.queue = None
        self._va = 0

    @property
    def va(self):
        return self._va

    @va.setter
    def va(self, value):
        self._va = value
        self.whenChanged()

    def whenChanged(self):
        next = self.queue.dequeue()
        next.function()

关于python - 如何在变量更改时触发另一个对象中的函数。 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39730037/

相关文章:

python - 对多索引 DataFrame 上的不同行执行操作

python - Pandas - 如何创建一个新列,该新列从前一行或下一行(如果第一行)的列中获取值

python - 多处理程序 - 不并行执行

python - 如何自定义 pygments 的输出?

python - 使用 django-excel 通过 Excel 工作表上传数据

python - flask socket io无法正常工作(Windows 7和10)anaconda和python 3.7

python - 第 8 行 : SyntaxError - bad input (' ' )

python - 如何导入 python 模块并公开 Robot Ride 中的方法

python - 有没有办法在 kwargs 中转义关键字

python - 我应该为仅存在于 {class,method} 中的变量使用线程本地存储吗?