Guest User

Untitled

a guest
Jun 24th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. # .NET-style events in Python.
  2. import time
  3. import thread
  4. from datetime import datetime
  5. class Event():
  6. def __init__(self):
  7. self.event_handlers = []
  8. def add_handler(self, event_handler):
  9. self.event_handlers.append(event_handler)
  10. def remove_handler(self, event_handler):
  11. self.event_handlers.remove(event_handler)
  12. def raise_event(self, sender, eventArgs):
  13. for handler in self.event_handlers:
  14. thread.start_new_thread(handler, (sender, eventArgs))
  15.  
  16. class EventArgs():
  17. @property
  18. def empty(self):
  19. if not __empty:
  20. __empty = EventArgs()
  21. return __empty
  22. empty = staticmethod(empty)
  23.  
  24. class FireAlarmActivatedEventArgs(EventArgs):
  25. def __get_time(self):
  26. return self.time
  27. def __get_room(self):
  28. return self.room
  29. time = property(fget=__get_time)
  30. room = property(fget=__get_room)
  31. def __init__(self, time, room):
  32. self.time = time
  33. self.room = room
  34.  
  35. class Building:
  36. @property
  37. def fire_alarm_activated(self):
  38. return self.__fire_alarm_activated
  39. def __init__(self):
  40. self.__fire_alarm_activated = Event()
  41. def start_fire(self):
  42. print "It burns, it burns."
  43. self.fire_alarm_activated.raise_event(
  44. self, FireAlarmActivatedEventArgs(datetime.now(), 303))
  45. def evacuate(self):
  46. print "Evacuating building %s." % (id(self))
  47.  
  48. class Program:
  49. def __init__(self):
  50. self.building = Building()
  51. def on_fire_alarm_activated(self, sender, eventArgs):
  52. print "Fire detected in building %s, room %s, at %s" % (
  53. id(sender), eventArgs.room, eventArgs.time)
  54. print "Calling fire department."
  55. sender.evacuate()
  56. def main(self, *args):
  57. print "\n"
  58. self.building.fire_alarm_activated.add_handler(
  59. self.on_fire_alarm_activated)
  60. self.building.start_fire()
  61. time.sleep(0.1)
  62. print "\n"
  63.  
  64. Program().main()
Add Comment
Please, Sign In to add comment