2015-12-27 117 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在函數被調用之前不存在,這可能在定義後很長,或根本不存在。