Вы могли бы быть в состоянии получить некоторые идеи реализации от библиотека Ruby/ProgressBar , который генерирует текстовые индикаторы выполнения. Я споткнулся через него несколько месяцев назад, но не сделал использования из него.
Используйте functools.wraps ()
для обновления атрибутов декоратора:
from functools import wraps
def decorator(f):
@wraps(f)
def _decorator():
print 'decorator active'
f()
return _decorator
@decorator
def foo():
'''the magic foo function'''
print 'this is function foo'
help(foo)
Я нашел решение, но не знаю, действительно ли оно хорошо:
def decorator(f):
def _decorator():
print 'decorator active'
f()
_decorator.__name__=f.__name__
_decorator.__doc__=f.__doc__
return _decorator
Часть с _decorator .__ name __ = f .__ name __
кажется немного отвратительным ... Как вы думаете?
Взгляните на functools.wraps
: http://docs.python.org/library/functools.html