首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中实现hook或回调的首选方式是什么?

在Python中实现hook或回调的首选方式是什么?

提问于 2018-02-28 04:19:19
回答 2关注 0查看 530

我想为我的某个模块的用户提供能力,通过提供一个调用用户函数的接口来扩展其功能。例如,我想让用户能够在创建类的实例时得到通知,并且有机会在实例使用之前修改实例。

我实现它的方式是声明一个实例化的模块级工厂函数:

代码语言:txt
复制
# in mymodule.py
def factory(cls, *args, **kwargs):
    return cls(*args, **kwargs)

后来,当我需要一个MyModule的类的实例,我做的factory(cls, arg1, arg2)不是cls(arg1, arg2)

为了扩展它,程序员会在另一个模块中写入如下的函数:

代码语言:txt
复制
def myFactory(cls, *args, **kwargs):
    instance = myFactory.chain(cls, *args, **kwargs)
    # do something with the instance here if desired
    return instance

以上回调的安装如下所示:

代码语言:txt
复制
myFactory.chain, mymodule.factory = mymodule.factory, myFactory

这对我来说似乎很简单,但我想知道,作为一名Python程序员,是否希望函数能够注册回调函数,而不是使用赋值工具进行注册,或者如果还有其他方法可以使用。

我期待尽可能简单; 例如,我不认为大多数应用程序实际上需要链接多个用户回调(尽管无限制的链接是通过上述模式“免费”的)。我怀疑他们需要删除回调或指定优先级或顺序。像python-callbacksPyDispatcher这样的模块对我来说似乎过于矫枉过正了,尤其是后者,但是如果对于使用我的模块的程序员有很大的好处,我会向他们开放。

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档