实现一个事件监听器Event 类,支持下列方法 addEventlistener(eventName: string,listener: function) :监听事件,当事件触发时执行回调函数 removeEventlistener (eventName: string,listener: function):移除监听事件 addEventlistenerOnce(eventName: string,listener: function):监听事件,当事件触发时执行回调函数并只执行一次回调函数 removeAll(eventName:string) 移除监听事件的所有回调函数 emit(eventName) 触发事件,执行回调函数 其中参数eventName为事件名,listener为事件触发后执行的回调函数 系统将自动执行你实现的Event类中的函数,校验是否实现以上功能 注意:系统通过执行函数,将控制台输出信息与测试用例进行比对,以验证函数的正确。所以函数内请不要添加输出控制台信息的代码,比如 Javascript 的console.log
时间: 2023-07-17 20:12:27 浏览: 102
addEventListener()和removeEventListener()追加事件和删除追加事件
好的,我会根据您的要求来实现 Event 类。以下是我实现的代码:
```python
class Event:
def __init__(self):
self.listeners = {}
def addEventListener(self, eventName, listener):
if eventName not in self.listeners:
self.listeners[eventName] = []
self.listeners[eventName].append(listener)
def removeEventListener(self, eventName, listener):
if eventName in self.listeners:
self.listeners[eventName].remove(listener)
def addEventListenerOnce(self, eventName, listener):
def once_listener(*args, **kwargs):
listener(*args, **kwargs)
self.removeEventListener(eventName, once_listener)
self.addEventListener(eventName, once_listener)
def removeAll(self, eventName):
if eventName in self.listeners:
del self.listeners[eventName]
def emit(self, eventName):
if eventName in self.listeners:
for listener in self.listeners[eventName]:
listener()
```
现在,我们可以使用一些测试用例来验证这个实现:
```python
# 创建 Event 实例
event = Event()
# 定义回调函数
def callback1():
print("Callback 1 executed")
def callback2():
print("Callback 2 executed")
def callback3():
print("Callback 3 executed")
# 添加事件监听器
event.addEventListener("event1", callback1)
event.addEventListener("event1", callback2)
event.addEventListenerOnce("event2", callback3)
# 触发事件
event.emit("event1") # 期望输出 "Callback 1 executed" 和 "Callback 2 executed"
event.emit("event2") # 期望输出 "Callback 3 executed"
event.emit("event2") # 不会触发回调函数
# 移除事件监听器
event.removeEventListener("event1", callback1)
event.removeAll("event2")
# 再次触发事件
event.emit("event1") # 期望输出 "Callback 2 executed"
```
希望这个实现满足您的需求。如果您有任何问题,请随时向我提问。
阅读全文