#/usr/env/bin python" "This is document" "classEvent (object):" "one way to initialize an event" " def __init__(Self,event_type,data=None): Self._type=event_type Self._data=Data @propertydeftype (self):returnSelf._type @propertydefdata (self):returnSelf._dataclassEventdispatcher (object):"""Event Distribution class listens and distributes event events""" def __init__(self):#Initializing EventsSelf._events =dict ()def __del__(self): self._events=NonedefHas_listener (self,event_type,listener):ifEvent_typeinchSelf._events.keys ():returnListenerinchSelf._events[event_type]Else: returnFalsedefdispatch_event (self,event):"""Dispatch An instance of Event class""" #distribute event to all associated listener ifEvent.typeinchSelf._events.keys (): Listeners=Self._events[event.type] forListenerinchListeners:listener (Event)defAdd_event_listener (self,event_type,listener):#add Listner to a type of event if notSelf.has_listener (Event_type,listener): Listeners=Self._events.get (event_type,[]) listeners.append (listener) Self._events[event_type]=ListenersdefRemove_event_listener (self,event_type,listener):ifSelf.has_listener (Event_type,listener): Listeners=Self._events[event_type]ifLen (listeners) = = 1: delSelf._events[event_type]Else: Listeners.remove (Listener) Self._events[event_type]=ListenersclassMyEvent (Event): ASK="askmyevent"RESPOND="respondmyevent"classWhoask (object):def __init__(self,event_dispatcher): Self.event_dispatcher=Event_dispatcher Self.event_dispatcher.add_event_listener (myevent.respond,self.on_answer_event ) defAsk (self):Print("Who is listener to me?") self.event_dispatcher.dispatch_event (MyEvent (myevent.ask,self) )defon_answer_event (self,event):Print("Receive event%s", Event.data)classWhorespond (object):def __init__(self,event_dispatcher): Self.event_dispatcher=event_dispatcher Self.event_dispatcher.add_event_listener (myevent.ask,self.on_ask_event)defon_ask_event (self,event): Self.event_dispatcher.dispatch_event (MyEvent (myevent.respond,self)) Dispatcher =eventdispatcher () who_ask=Whoask (Dispatcher) Who_responde1=Whorespond (Dispatcher) Who_responde2=Whorespond (Dispatcher)#Whoask AskWho_ask.ask ()
Transferred from: http://my.oschina.net/u/1462124/blog/477693
python-Event-driven model code