近期在学习POX,由于没有系统学习过python,所以在阅读代码方面着实苦恼了一番,至此还停留在生读的阶段。
为了不边学边往,特此记录。仅为自身学习记录为目的,若能为大家提供有用的信息,那就再好不过了~~
由简单到复杂:
1)方法_generateEventID():此方法用来生成self对象的事件ID,可以用来返回_nextEventID,实际上就是对eid进行了+1操作
2)方法EventError(halt=False,remove=False):返回(halt、,remove)。其中halt=True代表了此事件不再能调用处理函数handler,remove=True则代表了此事件的 handler 将会被移除,即取消订阅该事件。
3)方法handleEventException(source, event, args, kw, exc_info):其实就是打印traceback中的异常信息。
4)类ReventError:revent引发的异常类,继承RuntimelyError,并没有进行方法的复写。
5)类Event:是所有事件的超父类,其中包含_invoke (self,handler, *args, **kw),可以通过此方法对handler进行复写。
6)类EventMixin:是最为重要的类,因为用于发布事件的类都是继承该类的,因为其内部定义了,如何添加和移除监听器等方法。初始化该类,则该对象的 事件元组为_eventMixin_events(),该对象的事件与处理函数的字典 _eventMixin_handlers{ }。
其中。对于监听器的添加操作,就是将所要添加的eventType 和hanlders加入_eventMixin_handlers{ }。返回(eventType,eid)。移除监 听器即从_eventMixin_handlers字典中删除。
6.1raiseEvent (self,event, *args, **kw):用来raise一个事件,若event属于一种eventType,即拥有相应的监听器,将会被args和kw参数初始化并返回event对象。若没有监听器,则不被创建,返回None.
6.2 raiseEventNoErrors (self,event, *args, **kw):当捕获到有handler抛出的异常,则raise一个事件。调用 handleEventException函数进行处理,保证后续事件的执行并打印失败的处理程序handler。
6.3 autoBindEvents(sink, source, prefix='',weak=False, priority=None):自动绑定函数自动为source上raise的事件,在sink上设置对应的listeners。返回被添加的listeners的ID 可以用于移除listeners。listeners=((eventType,eid),(eventType,eid),...)。其中需要注意的是,所需绑定的事件必须有对象的处理函数,而且必须命名为_handle_ methods。
6.4 addListener (self, eventType, handler, once=False, weak=False,priority=None, byName=False):添加监听器,返回(eventType,eid)。其实就是将eventtype和handler加入了 _eventMixin_handlers{ }。
6.5 addListeners (self,sink, prefix='', weak=False,priority=None):调用的是自动绑定函数.试图将sink上的所有_handle_ methods绑定到这个对象raise的事件。与listenTo()相反。
6.6 addListenerByName (self,*args, **kw):通过微字符串格式的时间名称和处理函数进行监听。即令参数中的byName为True,调用的是addListener函数。
6.7 listenTo (self,source, *args, **kv):自动订阅source上的所有events,将自身所有的_handle_ methods方法绑定到source时间上,是与addListener()相反。
6.8 _eventMixin_get_listener_count (self):返回监听器的个数。即_eventMixin_handlers中元素的个数。
6.9 removeListener (self, handlerOrEID, eventType=None):移除参数中eventType的监听器。
6.10 removeListeners (self, listeners):对listeners中的元素循环调用removeListener 方法
6.11 clearHandlers(self):移除此对象的所有handlers.即设置_eventMixin_handlers={}为空。
对于类callProxy:仅仅知道当订阅者或者发布者对象丢失时,由此类进行清理listener中的发布者对象的条目。