Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # .NET-style events in Python.
- import time
- import thread
- from datetime import datetime
- class Event():
- def __init__(self):
- self.event_handlers = []
- def add_handler(self, event_handler):
- self.event_handlers.append(event_handler)
- def remove_handler(self, event_handler):
- self.event_handlers.remove(event_handler)
- def raise_event(self, sender, eventArgs):
- for handler in self.event_handlers:
- thread.start_new_thread(handler, (sender, eventArgs))
- class EventArgs():
- @property
- def empty(self):
- if not __empty:
- __empty = EventArgs()
- return __empty
- empty = staticmethod(empty)
- class FireAlarmActivatedEventArgs(EventArgs):
- def __get_time(self):
- return self.time
- def __get_room(self):
- return self.room
- time = property(fget=__get_time)
- room = property(fget=__get_room)
- def __init__(self, time, room):
- self.time = time
- self.room = room
- class Building:
- @property
- def fire_alarm_activated(self):
- return self.__fire_alarm_activated
- def __init__(self):
- self.__fire_alarm_activated = Event()
- def start_fire(self):
- print "It burns, it burns."
- self.fire_alarm_activated.raise_event(
- self, FireAlarmActivatedEventArgs(datetime.now(), 303))
- def evacuate(self):
- print "Evacuating building %s." % (id(self))
- class Program:
- def __init__(self):
- self.building = Building()
- def on_fire_alarm_activated(self, sender, eventArgs):
- print "Fire detected in building %s, room %s, at %s" % (
- id(sender), eventArgs.room, eventArgs.time)
- print "Calling fire department."
- sender.evacuate()
- def main(self, *args):
- print "\n"
- self.building.fire_alarm_activated.add_handler(
- self.on_fire_alarm_activated)
- self.building.start_fire()
- time.sleep(0.1)
- print "\n"
- Program().main()
Add Comment
Please, Sign In to add comment