classObserver(object):def__init__(self,subject):self.subject=subjectself.weather=self.subject.weatherself.subject.add_observer(self)defupdate(self,weather,temperature,tips):self.weather=weatherself.temperature=temperatureself.tips=tipsself.display()defdisplay(self):return("今日天气:{}\n今日气温:{}\n今日建议:{}").format(self.weather,self.temperature,self.tips)classWeather(object):def__init__(self):self.observers=[]self.weather=""self.temperature=""self.tips=""defadd_observer(self,observer):self.observers.append(observer)defdelete_observer(self,observer):ifobserverinself.observers:self.observers.remove(observer)defnotify(self):forobserverinself.observers:observer.update(self.weather,self.temperature,self.tips)defadd_data(self,weather,temperature,tips):self.weather=weatherself.temperature=temperatureself.tips=tipsself.notify()ifname=='main':subject=Weather()observer=Observer(subject)subject.add_data('多云转阴','10~23℃','请注意别感冒!')subject.add_observer('张三')subject.add_observer('李四')subject.add_observer('Ben')defPrint():ox=subject.observersforoinox:weather_data=observer.display()print("{}你好,以下是今日的天气播报:\n{}\n").format(o,weather_data)Print()初学Python,在做观察者模式的时候发现print会打印出多余的东西你好,以下是今日的天气播报:今日天气:多云转阴今日气温:10~23℃今日建议:请注意别感冒!请问这是什么原因,以及解决之道
2 回答

慕哥6287543
TA贡献1831条经验 获得超10个赞
observer=Observer(subject)self.subject.add_observer(self)使得observer被添加到subject.observers中去print("{}你好,以下是今日的天气播报:\n{}\n").format(o,weather_data)o就是observer,printobserver所以会输出 可以看一下“__str__”方法,可以修改printobserver时的返回值

白衣染霜花
TA贡献1796条经验 获得超10个赞
在ClassObserver的init函数中,self.subject.add_observer(self)语句将Weather的实例对象append到Weather的observerslist里面了。
添加回答
举报
0/150
提交
取消