Python装饰器,其参数取决于修饰函数

时间:2015-12-27 13:48:25

标签: python decorator

我有一个像这样装饰的功能:

@do_something(cache_key=CACHE_ID ,timeout=CACHE_ID_TIMEOUT)        
def get_something_from_cache():
    ...
    ...
    ...
    return result

我的装饰者:

def do_something(function=None, cache_key='', timeout=300):

    def decorator(func):
        @wraps(func, assigned=available_attrs(func))
        def inner(*args, **kwargs):
            ...
            ...
            ...
    return decorator if function is None else decorator(function) 

我希望能够拥有不同的' cache_key'取决于装饰函数输入。类似的东西:

@do_something(cache_key=CACHE_ID.format(att) ,timeout=CACHE_ID_TIMEOUT)        
def get_something_from_cache(att):
    ...
    ...
    ...
    return result

有可能??

1 个答案:

答案 0 :(得分:2)

不。

函数装饰器在定义装饰函数后执行。在调用函数之前,att不存在,可能在定义之后很长时间,或者根本不存在。