python 仪表 驱动 代码_Python-事件驱动模型代码

本文介绍了一个简单的事件驱动编程示例,通过定义事件类和事件分发器来实现不同组件之间的解耦通信。具体展示了如何注册事件监听器并响应特定类型的事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#/usr/env/bin python

'''this is document'''

classEvent(object):'''事件初始化的一个方式'''

def __init__(self,event_type,data=None):

self._type=event_type

self._data=data

@propertydeftype(self):returnself._type

@propertydefdata(self):returnself._dataclassEventDispatcher(object):"""event分发类 监听和分发event事件"""

def __init__(self):#初始化事件

self._events =dict()def __del__(self):

self._events=Nonedefhas_listener(self,event_type,listener):if event_type inself._events.keys():return listener inself._events[event_type]else:returnFalsedefdispatch_event(self,event):"""Dispatch an instance of Event class"""

#分发event到所有关联的listener

if event.type inself._events.keys():

listeners=self._events[event.type]for listener inlisteners:

listener(event)defadd_event_listener(self,event_type,listener):#给某种事件类型添加listner

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]if len(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 are 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 ask

who_ask.ask()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值