2015-12-27 105 views
0

我有一个函数装饰这样的:Python的装饰带参数取决于装饰功能

@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 

是否有可能?

回答

2

没有。

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