вторник, 22 апреля 2008 г.

decorator

UPD: Александр Соловьёв написал про это лучше, здесь.

---

Хорошая библиотека для создания декораторов:


from decorator import decorator

def trace(f, *args, **kw):
print "calling %s with args %s, %s" % (f.func_name, args, kw)
return f(*args, **kw)

@decorator(trace)
def f1(x):
pass

>>> f1(0)
calling f1 with args (0,), {}

Не нарушает сигнатуры функций:


>>> print getargspec(f1)
(['x'], None, None, None)

@decorator(trace)
def f(x, y=1, z=2, *args, **kw):
pass

>>> f(0, 3)
calling f with args (0, 3, 2), {}

>>> print getargspec(f)
(['x', 'y', 'z'], 'args', 'kw', (1, 2))

находится тут.

4 комментария:

  1. Такой ? [:||||:]

    Если серьёзно, опубликуйте, плиз, ссылочку, где про это написано. Видимо, хороший сайт - я думаю, что будет полезно не только мне узнать о нём, но и всем питоноводам.

    Насчёт 2.5 - я не считаю это недостатком.

    ОтветитьУдалить
  2. Ага, очень похож;)

    Так и так все знают у Пираньи уже давно проскочило http://piranha.org.ua/blog/2007/11/16/few-words-about-decorators/

    А вот мой сервер с 2.4 считает это существенным недостатком. Пока переубеждать не пробовал:)

    ОтветитьУдалить
  3. Да, Александр написал про это лучше.
    Советую всем прочитать его пост. Сейчас обновлю свой, добавлю линк на его пост в текст.

    ОтветитьУдалить