博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python-事件驱动模型代码
阅读量:5113 次
发布时间:2019-06-13

本文共 2673 字,大约阅读时间需要 8 分钟。

#/usr/env/bin python'''  this is document'''class Event(object):    '''      事件初始化的一个方式    '''    def __init__(self,event_type,data=None):        self._type = event_type        self._data = data    @property    def type(self):        return self._type    @property    def data(self):        return self._dataclass EventDispatcher(object):     """    event分发类 监听和分发event事件    """     def __init__(self):         #初始化事件         self._events = dict()     def __del__(self):         self._events = None     def has_listener(self,event_type,listener):        if event_type in self._events.keys():            return listener in self._events[event_type]        else:            return False     def dispatch_event(self,event):          """        Dispatch an instance of Event class        """        # 分发event到所有关联的listener          if event.type in self._events.keys():              listeners = self._events[event.type]              for listener in listeners:                  listener(event)     def add_event_listener(self,event_type,listener):         #给某种事件类型添加listner         if not self.has_listener(event_type,listener):             listeners = self._events.get(event_type,[])             listeners.append(listener)             self._events[event_type] = listeners     def remove_event_listener(self,event_type,listener):         if self.has_listener(event_type,listener):             listeners = self._events[event_type]             if len(listeners) == 1:                 del self._events[event_type]             else:                 listeners.remove(listener)                 self._events[event_type] = listenersclass MyEvent(Event):    ASK = "askMyEvent"    RESPOND = "respondMyEvent"class WhoAsk(object):    def __init__(self,event_dispatcher):        self.event_dispatcher = event_dispatcher        self.event_dispatcher.add_event_listener(            MyEvent.RESPOND,self.on_answer_event        )    def ask(self):        print("who are listener to me?")        self.event_dispatcher.dispatch_event(MyEvent(MyEvent.ASK,self))    def on_answer_event(self,event):        print("receive event %s",event.data)class WhoRespond(object):   def __init__(self,event_dispatcher):       self.event_dispatcher = event_dispatcher       self.event_dispatcher.add_event_listener(MyEvent.ASK,self.on_ask_event)   def on_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()

转自:http://my.oschina.net/u/1462124/blog/477693

转载于:https://www.cnblogs.com/JohnABC/p/5758925.html

你可能感兴趣的文章
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
设计模式之装饰者模式
查看>>
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>
window添加右键菜单
查看>>
入手腾龙SP AF90mm MACRO
查看>>
Window7上搭建symfony开发环境(PEAR)
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
一些方便系统诊断的bash函数
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>