Потребителски панел
Запомни
Реклама

Прост клас за събития в python | Автор: R3sp3k7 на 14:08:2009 в 21:06:54

Python е страхотен език, за ... ами, хубав е за много неща! Но запитвалили сте се някога за това как да приложим някакъв вид система с "събития" в python?

Например, нека предложим, че ние изграждаме IRC бот. Всеки път, когато съобщението е изпратено в канал, определено събитие трябва да се задейства. Например, ако бот поддържа скриптове,сркиптовете трябва да могат да регистрират секунданти на събитието. Когат се изпълни събитието тези секунданти да се извикат.
Код:
  1. def eventHandler():
  2. print "Hello World!"
  3.  
  4. channelMessage = Event() # Създава обекта "събитие"
  5. channelMessage.add(eventHandler) # Добавя секундант
  6. channelMessage.run()

Както виждате, това изглежда лек, но мощно решение. Затова, нека да създадем класа за събития!
Код:
  1. class Event:
  2.  
  3. def __init__(self):
  4. self._handlers = []
  5.  
  6. def add(self, handler):
  7.  
  8. self._handlers.append(handler)
  9.  
  10. def run(self, *args):
  11.  
  12. for handler in self._handlers:
  13. handler(*args)

Това изглежда доста просто, нали? Да обясним класа:
В конструктура просто създаваме празен списък на секундатите.
Функцията "Добавяне(add)" добавя секундант към списъка.
Функцията "Изпълни(run)" е малко по-сложна: тя взима поризволен брой аргументи. Например,
ако създали събитие с аргументи "1, 2, 3", то всеки секундант ще е с едни и същи
агрументи. Звездичката преди "args" просто означава, че всички агументи ще бъдат в
списък (args). Когато функцията бъде повикана, тя ще чрез цикъл ще извика всички
секундати от нашият списък един по един.
Ето още един пример:
Код:
  1. def helloWorldHandler(hello, world):
  2. print hello + " " + world + "!"
  3.  
  4. event = Event()
  5. event.add(helloWorldHandler)
  6. event.run("Hello", "World")

Резултата от примера ще е "Hello World".
Готови сме с нашият клас, толкова просто, както и толкова полезно :)

Урока е преведен от www.codetime.net за www.dev-bg.eu.

Още от категория: Python | Добави като любим
Коментари
Име:
Коментар:
Въведи кода*:
Категории
Реклама
Статистика
  • Уроци: 40
  • Проекти: 2
  • Коментари: 31
  • Потребители: 67
  • Общо онлайн: 5
  • Общо теми: 41
  • Общо мнения: 135