Python观察者模式:调用notify_observers方法时出现AttributeError

问题描述 投票:0回答:1

我尝试在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”

请问您知道这个错误的原因吗?

谢谢

python-3.x compiler-errors updates observer-pattern
1个回答
0
投票

我对此不确定,但我认为在通知函数中传递价格并期望在更新中可以解决此问题:

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
© www.soinside.com 2019 - 2024. All rights reserved.