我在阅读一篇关于如何在Python中实现观察者模式的帖子(链接)时,发现了以下评论:
下面是观察者模式的代码:
这些评论暗示观察者模式在Python中并不真正有用,存在其他方法可以达到相同的效果。这是真的吗?如果是,如何实现?1)在Python中,你也可以使用普通函数,不需要使用“Observer”类。
2)这是Java程序员转向Python后正在尝试做的事情的绝佳例子 - 他们感觉Python缺少所有那些垃圾,并试图“移植”它。
下面是观察者模式的代码:
class Observable(object):
def __init__(self):
self.observers = []
def register(self, observer):
if not observer in self.observers:
self.observers.append(observer)
def unregister(self, observer):
if observer in self.observers:
self.observers.remove(observer)
def unregister_all(self):
if self.observers:
del self.observers[:]
def update_observers(self, *args, **kwargs):
for observer in self.observers:
observer.update(*args, **kwargs)
from abc import ABCMeta, abstractmethod
class Observer(object):
__metaclass__ = ABCMeta
@abstractmethod
def update(self, *args, **kwargs):
pass
class AmericanStockMarket(Observer):
def update(self, *args, **kwargs):
print("American stock market received: {0}\n{1}".format(args, kwargs))
class EuropeanStockMarket(Observer):
def update(self, *args, **kwargs):
print("European stock market received: {0}\n{1}".format(args, kwargs))
if __name__ == "__main__":
observable = Observable()
american_observer = AmericanStockMarket()
observable.register(american_observer)
european_observer = EuropeanStockMarket()
observable.register(european_observer)
observable.update_observers('Market Rally', something='Hello World')