如何获得装饰者的参数?

时间:2014-05-21 15:15:36

标签: python decorator python-decorators

有没有办法在给定函数被包装的情况下获取装饰器的参数?例如,

@job('default')
def update_index():
    call_command("update_index", remove=True) 


func = update_index
args = ?? # How to use 'func' to get the string 'default' here?

1 个答案:

答案 0 :(得分:4)

一般来说,你不能。

job('default')首先执行 ;返回的内容用作装饰器;实质上,python确实:

def update_index():
    call_command("update_index", remove=True) 
update_index = job('default')(update_index)

因此,job('default')可以返回任何。它可以返回一个函数,它只会返回它的参数:

def job(value):
    return lambda f: f

这与value以及返回的“装饰者”无关。是一个无操作,它返回原始函数不变

对于特定的装饰器,很可能他们留下了我们可以反省的闭包或额外属性。但这实际上取决于特定的装饰器。