См. Ссылку С.Лотта о Python-декораторах для некоторых замечательных примеров, и посмотрите , определяющий PEP для декораторов .
У Python с самого начала был AOP, у него просто не было впечатляющего имени.
В Python 2.4 был добавлен синтаксис декоратора, что делает синтаксически очень удобным применение декораторов.
Может быть, если вы хотите применять декораторы на основе правил, вам понадобится библиотека, но если вы хотите пометить соответствующие функции / методы при их объявлении, вы, вероятно, этого не сделаете.
Вот пример простого кеширующего декоратора (я написал для этот вопрос ):
import pickle, functools
def cache(f):
_cache = {}
def wrapper(*args, **kwargs):
key = pickle.dumps((args, kwargs))
if key not in _cache:
_cache[key] = f(*args, **kwargs) # call the wrapped function, save in cache
return _cache[key] # read value from cache
functools.update_wrapper(wrapper, f) # update wrapper's metadata
return wrapper
import time
@cache
def foo(n):
time.sleep(2)
return n*2
foo(10) # first call with parameter 10, sleeps
foo(10) # returns immediately