X Tutup
""" >>> WriteEvent.register(log) >>> WriteEvent.notify('file #1') file #1 was written >>> WriteEvent.register(AnotherObserver()) >>> WriteEvent.notify('file #2') file #2 was written Yeah WriteEvent told me! """ class Event(object): _observers = [] def __init__(self, subject): self.subject = subject @classmethod def register(cls, observer): if observer not in cls._observers: cls._observers.append(observer) @classmethod def unregister(cls, observer): if observer in cls._observers: self._observers.remove(observer) @classmethod def notify(cls, subject): event = cls(subject) for observer in cls._observers: observer(event) class WriteEvent(Event): def __repr__(self): return 'WriteEvent' def log(event): print('%s was written' % event.subject) class AnotherObserver(object): def __call__(self, event): print('Yeah %s told me!' % event) if __name__ == '__main__': import doctest failed, attempted = doctest.testmod() if not failed: print('OK: %s tests passed' % attempted) else: print('FAIL: %s test(s) failed (of %s total)' % (failed, attempted))
X Tutup