Python中无需额外包装将已有函数应用于类实例装饰器方法的实现方案
你不需要额外定义包装函数,Python 的 @ 装饰器语法本身就是语法糖,直接手动调用装饰器即可实现对已有函数的装饰。
你平常用到的写法:
@k.decorator_method(method_args) def my_func(): # 函数逻辑
本质上等价于:
def my_func(): # 函数逻辑 my_func = k.decorator_method(method_args)(my_func)
针对你提到的两种场景,分别可以这么实现:
- 装饰已经定义好的
my_func
# 你在其他位置已经定义完成的函数 def my_func(): # 原有逻辑 pass k = LibClass() method_args = (,) # 直接应用装饰器,无需额外包装 # 如果你不需要用到装饰器返回的新函数,甚至可以不用赋值,直接执行下一行即可完成回调注册 my_func = k.decorator_method(method_args)(my_func)
- 装饰闭包返回的函数
def my_func_producer(more_args): def my_func(): # 用more_args实现对应逻辑 pass return my_func more_args = (,) # 直接传入闭包返回的函数即可 produced_func = k.decorator_method(method_args)(my_func_producer(more_args))
内容的提问来源于stack exchange,提问作者hfhc2
相关产品推荐
相关产品推荐

