Если я сделаю следующее
def mydecorator(f):
def wrapper(*args, **kwargs):
f(*args, **kwargs)
wrapper.__doc__ = f.__doc__
wrapper.__name__ = f.__name__
return wrapper
@mydecorator
def myfunction(a,b,c):
'''My docstring'''
pass
И затем введите help myfunction
, я получаю:
Help on function myfunction in module __main__:
myfunction(*args, **kwargs)
My docstring
Таким образом, имя и строка документа правильно скопированы. Есть ли способ также скопировать фактическую подпись вызова, в этом случае (a, b, c)
?
3 ответа
Вот пример использования модуля декоратора Мишеля Симионато для исправления подписи:
import decorator
@decorator.decorator
def mydecorator(f,*args, **kwargs):
return f(*args, **kwargs)
@mydecorator
def myfunction(a,b,c):
'''My docstring'''
pass
help(myfunction)
# Help on function myfunction in module __main__:
# myfunction(a, b, c)
# My docstring
Эта функциональность предоставляется модулем проверки стандартной библиотеки Python, в частности inspect.getargspec.
>>> import inspect
>>> def f(a, b, c=0, *args, **kwargs): return
...
>>> inspect.getargspec(f)
ArgSpec(args=['a', 'b', 'c'], varargs='args', keywords='kwargs', defaults=(0,))
Попробуйте модуль decorator
, доступный здесь: http: //pypi.python. орг / PyPI / декоратор / 3.2.0
Соответствующая часть документов: http: // micheles. googlecode.com/hg/decorator/documentation.html#statement-of-the-problem
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.