class Observer(object):
def __init__(self,subject):
self.subject = subject
self.weather = self.subject.weather
self.subject.add_observer(self)
def update(self,weather,temperature,tips):
self.weather = weather
self.temperature = temperature
self.tips = tips
self.display()
def display(self):
return ("今日天气:{} \n今日气温: {} \n今日建议:{}").format(self.weather,self.temperature,self.tips)
class Weather(object):
def __init__(self):
self.observers = []
self.weather = ""
self.temperature = ""
self.tips = ""
def add_observer(self,observer):
self.observers.append(observer)
def delete_observer(self,observer):
if observer in self.observers:
self.observers.remove(observer)
def notify(self):
for observer in self.observers:
observer.update(self.weather,self.temperature,self.tips)
def add_data(self,weather,temperature,tips):
self.weather = weather
self.temperature = temperature
self.tips = tips
self.notify()
if name=='main':
subject= Weather()
observer = Observer(subject)
subject.add_data('多云转阴','10~23℃','请注意别感冒!')
subject.add_observer('张三')
subject.add_observer('李四')
subject.add_observer('Ben')
def Print():
ox = subject.observers
for o in ox:
weather_data = observer.display()
print("{}你好,以下是今日的天气播报:\n{}\n").format(o,weather_data)
Print()
初学Python,在做观察者模式的时候发现print会打印出多余的东西
<main.Observer object at 0x0224F3B0>你好,以下是今日的天气播报:
今日天气:多云转阴
今日气温: 10~23℃
今日建议:请注意别感冒!
请问这是什么原因,以及解决之道
巴扎黑2017-04-17 15:16:05
으아악
subject.observers에 관찰자를 추가합니다
으아악o는 관찰자, 인쇄 관찰자
따라서 <0x0224F3B0에 있는 main.Observer 개체>
"__str__" 메소드를 살펴보고 인쇄 관찰자의 반환 값을 수정할 수 있습니다
迷茫2017-04-17 15:16:05
Class Observer의 init 함수에서 self.subject.add_observer(self) 문은 Weather의 관찰자 목록에 Weather의 인스턴스 개체를 추가합니다.