Events: The Python Way

David Wilson dw at botanicus.net
Sat Jul 28 19:34:58 EDT 2007


Hi there,

Python has no built-in way of doing this. You may consider writing
your own class if you like this pattern (I personally do):

class Event(object):
    def __init__(self):
        self.subscribers = set()

    def __iadd__(self, subscriber):
        self.subscribers.add(subscriber)
        return self

    def __isub__(self, subscriber):
        self.subscribers.pop(subscriber)
        return self

    def __call__(self, *args, **kwargs):
        for subscriber in self.subscribers:
            subscriber(*args, **kwargs)


def HandleFoo(strng):
    print "HandleFoo:", strng

OnFoo = Event()
OnFoo += HandleFoo

OnFoo("Test.")


On 29/07/07, Gianmaria <gianmaria at hotmail.com> wrote:
> Hi,
> i'm a .net programmer and i'm learnig python, so this question can be very
> stupid or easy for python programmers. I've a doubt about events.... here is
> what:
>
> in c# for example i can write a delegate and an event in this way...
>
> public delegate SomethingChangedHandler(string message);
> public event SomethingChangedHandler SomethingChanged;
>
> and later in the code fire this event in this way...
>
> if(SomethingChanged != null)
> {
>     SomethingChanged("Nothing important");
> }
>
> and the subscription of this event of other objects can be easy as
>
> eventGeneratorObject.SomethingChanged += new
> SomethingChangedHandler(aFunctionto_takecareof_it);
>
> and even the handlig of the event is aesy...
>
> void aFunctionto_takecareof_it(string msg)
> {
>
> }
>
>
> ....now the question is.. how can i do the same using Python? Every help is
> appreciated
>
>
>
>
>
> Regards,
> Gianmaria
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>



More information about the Python-list mailing list