Chr*_*s R 13 python reflection decorator inspect
给定一个功能:
def func(f1, kw='default'):
pass
bare_argspec = inspect.getargspec(func)
@decorator
def func2(f1, kw='default'):
pass
decorated_argspec = inspect.getargspec(func2)
Run Code Online (Sandbox Code Playgroud)
我怎样才能创建这样的装饰器bare_argspec == decorated_argspec?
(至于为什么,调用装饰函数的框架执行argspec检查以选择要传入的内容,因此装饰器必须保留相同的argspec才能发挥出色.当我在#python上提出这个问题时,我得到了一个长的关于为什么框架糟糕的演讲,这不是我正在寻找的;我必须在这里解决问题.另外,我也只是对答案感兴趣)
unu*_*tbu 12
Michele Simionato的装饰模块有一个名为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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2650 次 |
| 最近记录: |