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))
находится тут.
Баян;) Тем более только 2.5ятный
ОтветитьУдалитьТакой ? [:||||:]
ОтветитьУдалитьЕсли серьёзно, опубликуйте, плиз, ссылочку, где про это написано. Видимо, хороший сайт - я думаю, что будет полезно не только мне узнать о нём, но и всем питоноводам.
Насчёт 2.5 - я не считаю это недостатком.
Ага, очень похож;)
ОтветитьУдалитьТак и так все знают у Пираньи уже давно проскочило http://piranha.org.ua/blog/2007/11/16/few-words-about-decorators/
А вот мой сервер с 2.4 считает это существенным недостатком. Пока переубеждать не пробовал:)
Да, Александр написал про это лучше.
ОтветитьУдалитьСоветую всем прочитать его пост. Сейчас обновлю свой, добавлю линк на его пост в текст.