How can I programmatically change the argspec of a function in a python decorator?

前端 未结 3 1719
醉话见心
醉话见心 2020-12-07 00:52

Given a function:

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

@decorator
def func2(f1, kw=\'default\'):
    pass
decorate         


        
3条回答
  •  时光说笑
    2020-12-07 01:19

    Michele Simionato's decorator module has a decorator called decorator which preserves function 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)
    

提交回复
热议问题