class Subject: def attach(self): pass def remove(self): pass def noticefy(self): pass def getState(self): pass def setState(self): pass class ConcreteSubject(Subject): observer = [] state = '' def attach(self, obj): self.observer.append(obj) def remove(self, obj): self.observer.remove(obj) def noticefy(self): for i in self.observer: i.update() def getState(self): return self.state def setState(self, val): self.state = val class Observer: def update(self): pass class EmailObserver(Observer): def __init__(self, obj): self.subject = obj def update(self): print('email noticefy user', self.subject.getState()) class LogObserver(Observer): def __init__(self, obj): self.subject = obj def update(self): print('log update', self.subject.getState()) if __name__ == '__main__': subject = ConcreteSubject() subject.attach(EmailObserver(subject)) subject.attach(LogObserver(subject)) subject.setState('haha') subject.noticefy()