您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在python中“事后”将装饰器附加到函数?

如何在python中“事后”将装饰器附加到函数?

您导入sqrt了模块,只需在自己的全局名称空间中将装饰器应用到其中即可:

sqrt = print_args_decor(sqrt)

这会将sqrt模块名称空间中的名称设置为装饰器的结果。没有sqrt最初在此模块中定义的要求。

使用functools.wraps()装饰器保留功能元数据(例如名称和文档字符串)由装饰器决定。

在这方面装饰类没有什么不同:

ClassName = decorator(ClassName)

在Python 2上,对于 方法 您需要小心获取原始的未绑定函数。最简单的方法是使用以下method.__func__属性

try:
    # Python 2
    ClassName.function_name = decorator(ClassName.function_name.__func__)
except AttributeError:
    # Python 3
    ClassName.function_name = decorator(ClassName.function_name)

我将上述内容包装在中,try...except以使该模式可在Python版本之间使用。另一种选择是从类中获取函数对象__dict__,以免描述符协议介入:

ClassName.function_name = decorator(ClassName.__dict__['function_name'])
python 2022/1/1 18:34:46 有232人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶