Implementing C#/.NET events in Python
By Zef Hemel
- 1 minutes read - 122 wordsOne of the things I liked in C# is its event-system. Although you need quite a lot of code to define an event. When I saw Python supports operator overload, I thought I’d try to implement such an event system in Python, and I did in 12 lines of code:
class Event:<br> def __init__(self):<br> self.listeners = []<br> def __call__(self, *params):<br> for l in self.listeners:<br> l(*params)<br> def __add__(self, listener):<br> self.listeners.append(listener)<br> return self<br> def __sub__(self, listener):<br> self.listeners.remove(listener)<br> return self
This is how you can use it:
class MyClass:<br> def __init__(self):<br> self.Clicked = Event()<br> def click(self, button):<br> self.Clicked(self, button)
def onClick(sender, button):<br> print 'Button clicked: %s' % button
o = MyClass()<br>o.Clicked += onClick # subscribe to event<br>o.click('Right') # Trigger the event from outside<br>Cool huh? :)