我尝试在Python中使用观察者设计模式,但在调用Observable类中定义的notify_observers方法时出现错误
class Observable:
def __init__(self):
self.observers = []
def add_observer(self, observer):
if observer not in self.observers:
self.observers.append(observer)
def remove_observer(self, observer):
if observer in self.observers:
self.observers.remove(observer)
def notify_observers(self, *args, **kwargs):
for observer in self.observers:
observer.update(self, *args, **kwargs)
class Observer:
def update(self, observable, *args, **kwargs):
pass
class fruit(Observable):
def set_price(self, price):
self.price = price
self.notify_observers()
class basket(Observer):
def update(self, observable, *args, **kwargs):
if isinstance(observable, fruit):
price = observable.price
fruit_1 = fruit()
basket_1= basket()
fruit_1 .add_observer( basket_1)
fruit_1 .set_price(25)
调用notify_observers方法时,出现以下错误:
AttributeError:“str”对象没有属性“update”
请问您知道这个错误的原因吗?
谢谢
我对此不确定,但我认为在通知函数中传递价格并期望在更新中可以解决此问题:
class fruit(Observable):
def set_price(self, price):
self.price = price
self.notify_observers(price)
class basket(Observer):
def update(self, observable, price, *args, **kwargs):
if isinstance(observable, fruit):
self.price = price