Лучшая практика декоратора Python, использование класса вместо функции

Как я понял, есть два способа сделать декоратор 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()
52
задан pdm 21 February 2016 в 20:13
поделиться