class Publisher(object): def __init__(self): self.subscribers = dict() def subscribe(self, who, callback=None): if callback is None: callback = getattr(who, 'update') self.subscribers[who] = callback def unsubscribe(self, who): del self.subscribers[who] def dispatch(self, *args): for subscriber, callback in self.subscribers.items(): callback(*args)