Я бы сделал это.
Начиная с этого кода.
def foo(
flab_nickers, # a series of under garments to process
has_polka_dots=False,
needs_pressing=False # Whether the list of garments should all be pressed
):
...
Я бы написал парсер, который получает определения параметров функции и строит следующее:
def foo(
flab_nickers,
has_polka_dots=False,
needs_pressing=False,
):
"""foo
:param flab_nickers: a series of under garments to process
:type flab_nickers: list or tuple
:param has_polka_dots: default False
:type has_polka_dots: bool
:param needs_pressing: default False, Whether the list of garments should all be pressed
:type needs_pressing: bool
"""
...
Это довольно простая обработка регулярных выражений различных строковых шаблонов аргументов для заполнения шаблона документации.
Множество хороших IDE Python (например, PyCharm) понимают нотацию Sphinx param
по умолчанию и даже помечают переменные / методы в области видимости, которая, по мнению IDE, не соответствует объявленному типу.
Обратите внимание на лишнюю запятую в коде; это просто, чтобы сделать вещи последовательными. Это не причиняет вреда и может упростить ситуацию в будущем.
Вы также можете попробовать использовать компилятор Python для получения дерева разбора, его пересмотра и выдачи кода обновления. Я сделал это для других языков (не Python), поэтому я немного знаю об этом, но не знаю, насколько хорошо это поддерживается в Python.
Кроме того, это однократное преобразование.
Оригинальные встроенные комментарии в определении функции на самом деле не следуют за DRY, потому что это комментарий, на неформальном языке, и не может использоваться никакими, кроме самых сложных инструментов.
Комментарии Sphinx ближе к DRY, потому что они написаны на языке разметки RST, что значительно упрощает их обработку с помощью обычных инструментов синтаксического анализа текста в docutils
.
Это только СУХОЙ, если инструменты могут использовать его.
Полезные ссылки:
https://pythonhosted.org/an_example_pypi_project/sphinx.html#function-definitions
http://sphinx -doc.org / domains.html # id1