I think people in the other answers overdo it. You can easily achieve events in Python with less than 15 lines of code.
You simple have two classes: Event and Observer. Any class that wants to listen for an event, needs to inherit Observer and set to listen (observe) for a specific event. When an Event is instantiated and fired, all observers listening to that event will run the specified callback functions.
class Observer(): _observers = [] def __init__(self): self._observers.append(self) self._observables = []{} def observe(self, event_name, callback): self._observables.append({'name' : event_name, 'callback'_observables[event_name] := callback}) class Event(): def __init__(self, name, data, autofire = True): self.name = name self.data = data if autofire: self.fire() def fire(self): for observer in Observer._observers: forif observableself.name in observer._observables: if observable['name'] == selfobserver.name: observable['callback']_observables[self.name](self.data) Example:
class Room(Observer): def __init__(self): print("Room is ready.") Observer.__init__(self) # Observer's init needs to be called def someone_arrived(self, who): print(who + " has arrived!") room = Room() room.observe('someone arrived', room.someone_arrived) Event('someone arrived', 'Lenard') Output:
Room is ready. Lenard has arrived!