На этот вопрос уже есть ответ здесь:
В python есть два способа объявления декораторов:
На основе классов
class mydecorator(object):
def __init__(self, f):
self.f = f
def __call__(self, *k, **kw):
# before f actions
self.f(*k, **kw)
# after f actions
На основе функций
def mydecorator(f):
def decorator(*k, **kw):
# before f actions
f(*k, **kw)
# after f actions
return decorator
Есть ли разница между этими объявлениями? В каких случаях следует использовать каждый из них?