Using generators on Observable class
You haven't implemented the observer pattern as your subject, Observable, doesn't contain a list of observers.

Whilst this may seem like some small petty point it is the core problem that the pattern hopes to solve.
You have failed to make the subject relay to its observers. As you have moved the code, run, that should be in the observer into the subject.

This makes the observer interface neigh on useless, because if you want to change this functionality then you're screwed.


An example of the observer pattern is in Python's logging library.
In this you have events like a logger.info(message).
The logger, the subject, goes on to call the underlying handlers, observers, with the event.
This causes the handler to handle the event how it's been designed to.

It's common to have a StreamHandler and sometimes a FileHandler.
The former that just prints the message, and the latter that writes the message to a file.