【发布时间】:2011-10-04 07:08:04
【问题描述】:
在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
这些声明之间有什么区别吗? 在哪些情况下应该使用它们?
【问题讨论】:
-
有了类,就可以使用描述符协议了!
-
@phant0m:不利的一面是,您必须使用描述符协议的类(否则您的装饰器将无法完全在方法上工作)。
-
@Rosh:嗯,是的,你有一个非常强的地方:)