В 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
Есть ли разница между этими объявлениями? В каких случаях следует использовать каждый из них?