以下是我从一本书上看到的例子,特地分享给大家,仅供参考
作用:监控或者数据备份
创建核心对象:
class Inventory:
def __init__(self):
self.observers=[]
self._product=None
self._quantity=0
#
def attach(self,observer):
self.observers.append(observer)
#@property就是属性的get/set,我的另一篇有介绍
@property
def product(self):
return self._product
@product.setter
def product(self,value):
self._product=value
self._update_observers()
@property
def quantity(self):
return self._quantity
@quantity.setter
def quantity(self,value):
self._quantity=value
self._update_observers()
def _update_observers(self):
for observer in self.observers:
observer()
创建一个观察者:
class ConsoleObserver:
def __init__(self,inventory):
self.inventory=inventory
#必须实现call方法处理变化
def __call__(self):
print(self.inventory.product)
print(self.inventory.quantity)
测试:
>>i=Inventory()
>>c=ConsoleObserver(i)
>>i.attach(c)
>>i.product="widget"
widget
0
>>i.quantity=5
widget
5
那么,我们只需要再成立几个观察者,就可以拥有多个“同样”数据