根据我的理解,有两种方法可以实现 Python 装饰器,一种是使用类的 __call__
,另一种是定义和调用函数作为装饰器。这些方法的优缺点是什么?有没有更好的方法?
例子一
class dec1(object):
def __init__(self, f):
self.f = f
def __call__(self):
print "Decorating", self.f.__name__
self.f()
@dec1
def func1():
print "inside func1()"
func1()
# Decorating func1
# inside func1()
例子2
def dec2(f):
def new_f():
print "Decorating", f.__name__
f()
return new_f
@dec2
def func2():
print "inside func2()"
func2()
# Decorating func2
# inside func2()