据我所知,这就像一个观察者模式。 场景:一个Center对象保留其所有客户端的列表(队列)。我使用Twisted。
以下代码仅用于演示:
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()
答案 0 :(得分:4)
让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()
答案 1 :(得分:2)
每当更改类的属性时,都会调用setattr()
函数。您可以通过在班级中定义__setattr__(self, property, value)
函数来覆盖它。
您需要在此__ setattr__()
内进行所需的函数调用。以下是基于您的要求的示例:
class Centre(object):
def __init__(self):
self.queue = None
self.va = 0
def whenChanged(self):
next = self.queue.dequeue()
next.function()
def __setattr__(self, key, value):
self.key = value
self.whenChanged() <-- Your function
每当您尝试更改任何类属性的值时,都会调用此__settattr__
函数。