我是 python 新手,我在构建真正的应用程序时正在探索我的语言方式。现在我正在尝试构建一个基于事件的应用程序,并且正在考虑使用装饰器作为添加函数作为侦听器的一种方式:
@onEvent(eventSpecificArgument)
def foo():
print('foo')
在上面的示例中,我添加了函数 foo 作为事件的侦听器,并传递了一个将由装饰器使用的参数。
这是我想要的可能(并且足够聪明)的解决方案吗?如果是,我怎么能/应该实施它?
我是 python 新手,我在构建真正的应用程序时正在探索我的语言方式。现在我正在尝试构建一个基于事件的应用程序,并且正在考虑使用装饰器作为添加函数作为侦听器的一种方式:
@onEvent(eventSpecificArgument)
def foo():
print('foo')
在上面的示例中,我添加了函数 foo 作为事件的侦听器,并传递了一个将由装饰器使用的参数。
这是我想要的可能(并且足够聪明)的解决方案吗?如果是,我怎么能/应该实施它?
当然,装饰器只是可调用的。装饰符号只是语法糖,您的示例转换为:
def foo():
print('foo')
foo = onEvent(eventSpecificArgument)(foo)
所以你的onEvent()
可调用对象需要返回可以调用的东西;那个“东西”会被传入foo
。
无论您在onEvent
返回的“某物”中做什么,都取决于您。
像下面这样的东西会起作用:
registry = {}
def onEvent(eventname):
def eventdecorator(func):
registry.setdefault(eventname, []).append(func)
return func
return eventdecorator
这只是func
将给定事件名称添加到注册表并返回未更改的函数。
稍后,当您需要处理该事件时,您只需查找该事件的事件处理程序:
for func in registry.get(eventname, ()):
func()