加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python事件驱动模型的代码

发布时间:2020-12-17 17:14:49 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 __author__ = 'Administrator'#/usr/env/bin python ''' this is document'''class Event(object): ''' 事件初始化的一个方式 ''' def __init__(self,

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

__author__ = 'Administrator'
#/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._data
 
class EventDispatcher(object):
     """
    event分发类 监听和分发event事件
    """
     def __init__(self):
         #初始化事件
         self._events = dict()
 
     def __del__(self):
         self._events = None
 
     def has_listener(self,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,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,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] = listeners
 
class 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 ask
who_ask.ask()

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读