在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
这些声明之间有什么区别吗?在哪些情况下应该使用它们?