Как я понял, есть два способа сделать декоратор Python, либо использовать __call__
класса, либо определить и вызвать функцию в качестве декоратора. Каковы преимущества/недостатки этих методов? Есть ли один предпочтительный метод?
Пример 1
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()