Python 实现支持多监听器与取消注册的发布 - 订阅模式
以下是使用 Python 实现的简单的发布-订阅模式: ```python # 定义监听器类 Listener class Listener: def __init__(self, name): self.name = name def handle(self, data): print(f"{self.name} 收到消息: {data}") # 定义事件发射器类 EventEmitter class EventEmitter: def __init__(self): self.listeners = {} def on(self, event_name, listener): if event_name not in self.listeners: self.listeners[event_name] = [] self.listeners[event_name].append(listener) def emit(self, event_name, data): if event_name in self.listeners: for listener in self.listeners[event_name]: listener.handle(data) def off(self, event_name, listener): if event_name in self.listeners: self.listeners[event_name] = [l for l in self.listeners[event_name] if l!= listener] ``` 以下是使用示例: ```python emitter = EventEmitter() listener1 = Listener("监听器 1") listener2 = Listener("监听器 2") emitter.on("event1", listener1) emitter.on("event1", listener2) emitter.emit("event1", "这是一个消息") emitter.off("event1", listener1) emitter.emit("event1", "另一个消息") ``` ######[AI写代码神器 | 338点数解答 | 2024-11-08 10:26:15]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)478
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)432
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)426
- Flutter 3.22 发布!更新内容大揭秘,附计数器代码示例(讯飞星火 | 471点数解答 | 2024-05-20 11:30:28)200
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)333
- Java调用Python接口中文乱码?设置UTF - 8编码一招解决!(讯飞星火 | 263点数解答 | 2024-06-06 17:07:59)406
- 解决Java调用Python接口中文乱码问题:设置UTF - 8编码全攻略(讯飞星火 | 160点数解答 | 2024-06-06 17:18:39)428
- Java调用Python接口中文乱码问题:字符编码统一解决方案(讯飞星火 | 344点数解答 | 2024-06-06 17:19:55)542
- 解决Java调用Python接口时中文值乱码问题:设置字符编码为UTF-8(讯飞星火 | 264点数解答 | 2024-06-06 17:27:09)405
- Java JFrame 实现多界面跳转:含登录、注册及个人信息管理功能(讯飞星火 | 503点数解答 | 2024-06-06 23:49:29)404
- 超详细!用复杂 HTML 代码打造功能丰富网站,含特色搜索与展示(字节豆包 | 572点数解答 | 2024-11-17 07:58:26)270