您需要使用观察者模式。在以下代码中,一个人订阅以接收来自全球财富实体的更新。当全球财富发生变化时,该实体随后会向其所有订户(观察者)发出发生变化的警报。然后,人更新自己。
在此示例中,我使用了属性,但是没有必要。一个小警告:属性仅适用于新样式类,因此必须使用类声明后的(对象)才能起作用。
class GlobalWealth(object): def __init__(self): self._global_wealth = 10.0 self._observers = [] @property def global_wealth(self): return self._global_wealth @global_wealth.setter def global_wealth(self, value): self._global_wealth = value for callback in self._observers: print('announcing change') callback(self._global_wealth) def bind_to(self, callback): print('bound') self._observers.append(callback)class Person(object): def __init__(self, data): self.wealth = 1.0 self.data = data self.data.bind_to(self.update_how_happy) self.happiness = self.wealth / self.data.global_wealth def update_how_happy(self, global_wealth): self.happiness = self.wealth / global_wealthif __name__ == '__main__': data = GlobalWealth() p = Person(data) print(p.happiness) data.global_wealth = 1.0 print(p.happiness)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)