Skip to content

Instantly share code, notes, and snippets.

@simongarisch
Created October 18, 2019 00:48
Show Gist options
  • Save simongarisch/0f6b96e0b39216f164fa4c459b0271fc to your computer and use it in GitHub Desktop.
Save simongarisch/0f6b96e0b39216f164fa4c459b0271fc to your computer and use it in GitHub Desktop.
Python behavioral patterns - observer
from weakref import WeakSet
class Subject:
def __init__(self):
self.observers = WeakSet()
self.subject_state = None
def attach(self, observer):
observer.subject = self
self.observers.add(observer)
def detach(self, observer):
observer.subject = None
self.observers.discard(observer)
def notify(self):
for observer in self.observers:
observer.update(self.subject_state)
class Observer:
def __init__(self):
self.observer_state = None
self.subject = None
def update(self, state):
self.observer_state = state
subject = Subject()
observers = [Observer() for _ in range(3)] # create 3 observers
[subject.attach(observer) for observer in observers]
print([observer.observer_state for observer in observers]) # [None, None, None]
subject.subject_state = "Game On"
subject.notify()
print([observer.observer_state for observer in observers]) # ['Game On', 'Game On', 'Game On']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment