J'étais en train de parcourir un poste poste sur la façon dont le modèle de l'observateur peut être mis en œuvre en python. sur le même post, il y a ces commentaires.
1) En Python, vous pouvez tout aussi bien utiliser de simples fonctions, n'est pas vraiment nécessaire.
2) C'est un excellent exemple de ce que les programmeurs Java essaient de faire lorsque une fois qu'ils sont passés à Python - le et essaient de les "porter".
Ces commentaires impliquent que le pattern observateur n'est pas vraiment utile en Python et qu'il existe d'autres moyens d'obtenir le même effet. est-ce vrai et si oui, comment peut-on faire ?
Voici le code du modèle d'observateur :
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')