gpt4 book ai didi

python - 如何以编程方式更改 python 装饰器中函数的 argspec?

转载 作者:太空狗 更新时间:2023-10-29 17:31:19 26 4
gpt4 key购买 nike

给定一个函数:

def func(f1, kw='default'):
pass
bare_argspec = inspect.getargspec(func)

@decorator
def func2(f1, kw='default'):
pass
decorated_argspec = inspect.getargspec(func2)

我如何创建一个装饰器使得 bare_argspec == decorated_argspec

(至于为什么,调用装饰函数的框架会进行 argspec 检查以选择要传入的内容,因此装饰器必须保留相同的 argspec 才能玩得很好。当我在 #python 上提出这个问题时,我有一篇关于为什么框架很糟糕的长篇演讲,这不是我想要的;我必须在这里解决问题。另外,我也只是对答案感兴趣)

最佳答案

Michele Simionato 的 decorator module有一个名为 decorator 的装饰器,它保留函数 argspecs。

import inspect
import decorator

def func(f1, kw='default'):
pass
bare_argspec = inspect.getargspec(func)
print(bare_argspec)
# ArgSpec(args=['f1', 'kw'], varargs=None, keywords=None, defaults=('default',))

@decorator.decorator
def mydecorator(func,*args,**kw):
result=func(*args,**kw)
return result

@mydecorator
def func2(f1, kw='default'):
pass
decorated_argspec = inspect.getargspec(func2)
print(decorated_argspec)
# ArgSpec(args=['f1', 'kw'], varargs=None, keywords=None, defaults=('default',))

assert(bare_argspec==decorated_argspec)

关于python - 如何以编程方式更改 python 装饰器中函数的 argspec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3729378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com