Яндекс.Метрика

четверг, 7 июня 2012 г.

Объединение двух декораторов, Python

Сущствуют именнованные декораторы. И когда они используются вот так, то об этом не задумываешься:

@decor(descr = "Line")
def hello():
   print "Hello"

И даже в этом случае:

@decor(descr = "Line")
@seconddecor
def hello():
     print "Hello"

Так вот чтобы их объединить, нужен декоратор, который принимает кроме функции еще параметр descr. Это нужно организовать так:

def bothdecor(descr = ''):
    def new(f):
        g = decor(descr = descr)(seconddecor(f))
        return g
    return new

То есть декоратор decor() — функция, которая принимает параметр descr=descr и возвращает функцию, которая как раз и есть декоратор.

Теперь эти два декоратора можно вместе вызовывать как

@bothdecor(descr = 'Newline')
def func(...):
    ...

Комментариев нет:

Отправить комментарий