Використання javadoc для документації на Python [закрито]


162

В даний час я починаю з Python, і у мене є сильний фон PHP, і в PHP я взяв звичку використовувати javadocяк шаблон документації.

Мені було цікаво, чи javadocє його місце як docstringдокументація в Python. Які тут встановлені конвенції та / або офіційні керівні принципи?

Напр., Щось подібне занадто витончене, щоб вписатись у розум Python або я повинен намагатися бути максимально стислим?

"""
replaces template place holder with values

@param string timestamp     formatted date to display
@param string priority      priority number
@param string priority_name priority name
@param string message       message to display

@return string formatted string
"""

І якщо я трохи надто вичерпний, чи повинен я натомість щось подібне (де більшість документації не друкується __doc__методом)?

# replaces template place holder with values
#    
# @param string timestamp     formatted date to display
# @param string priority      priority number
# @param string priority_name priority name
# @param string message       message to display
#    
# @return string formatted string

def format(self, timestamp = '', priority = '', priority_name = '', message = ''):
    """
    replaces template place holder with values
    """
    values = {'%timestamp%' : timestamp,
              '%priorityName%' : priority_name,
              '%priority%' : priority,
              '%message%' : message}

    return self.__pattern.format(**values)

6
Тера також набагато більше відповідей на це на попереднє питання про те, що це дублікат.
Алекс Дюпюй

Відповіді:


227

Погляньте на формат reStructuredText (також відомий як "reST"), який є форматом розмітки в простому тексті / docstring і, мабуть, найпопулярнішим у світі Python. І ви, звичайно, повинні подивитися на Sphinx , інструмент для генерації документації з reStructuredText (використовується, наприклад, для самої документації Python). Сфінкс включає можливість вилучення документації з документації у вашому коді (див. Sphinx.ext.autodoc ) та розпізнає списки полів для відтворення за певними умовами . Це, мабуть, стало (або стає) найпопулярнішим способом це зробити.

Ваш приклад може виглядати так:

"""Replaces template placeholder with values.

:param timestamp: formatted date to display
:param priority: priority number
:param priority_name: priority name
:param message: message to display
:returns: formatted string
"""

Або розширено інформацією про тип:

"""Replaces template placeholder with values.

:param timestamp: formatted date to display
:type timestamp: str or unicode
:param priority: priority number
:type priority: str or unicode
:param priority_name: priority name
:type priority_name: str or unicode
:param message: message to display
:type message: str or unicode
:returns: formatted string
:rtype: str or unicode
"""

7
що ви робите, якщо вам потрібно перервати рядок для довгого опису? Як би це виглядало?
Skylar Saveland

6
Дивіться посилання на reStructuredText та списки полів, зокрема: docutils.sourceforge.net/docs/ref/rst/…
Стівен

6
Зауважте, що спосіб, де фрази тут не відповідають PEP 257 . Це має бути Replace template place holder with values.замість replaces template place holder with values- Помітьте речення, верхню літеру на початку та повну зупинку (.) В кінці.
kratenko

1
З версії 1.3 Sphinx також підтримує формат трохи приємніше через sphinx.ext.napoleonрозширення.
Петрі

3
Чи може хтось, будь ласка, вказати мені на найкращу документацію із зазначенням таких спеціальних документів, як ": param ____:" та ": return:"? Такий документ наразі здається досить важким.
krumpelstiltskin

75

Дотримуйтесь посібника зі стилю Google Python . Зауважте, що Сфінкс також може проаналізувати цей формат за допомогою наполеового розширення, яке буде поставлено у комплекті з Сфінксом 1.3 (це також сумісно з PEP257 ):

def func(arg1, arg2):
    """Summary line.

    Extended description of function.

    Args:
        arg1 (int): Description of arg1
        arg2 (str): Description of arg2

    Returns:
        bool: Description of return value

    """
    return True

Приклад взятий з наполеовської документації, зв'язаної вище.

Комплексний приклад всіх типів рядків документації тут .


20
для всіх людей, які читають доктрини
Вейлон Флінн,

1
Оновлений Google Python Керівництво Стиль посилання
confused00

@ confused00 Як я можу документувати, що мій метод повертає масив об’єктів?
Cito

1
Тепер я розгублений! аргументи чи парами? stackoverflow.com/questions/1788923/parameter-vs-argument
ШУВ

25

Стандарт для рядків документації python описаний у пропозиції 257 щодо вдосконалення Python .

Відповідний коментар до вашого методу був би чимось подібним

def format(...):
    """Return timestamp string with place holders replaced with values.

    Keyword arguments:
    timestamp     -- the format string (default '')
    priority      -- priority number (default '')
    priority_name -- priority name (default '')
    message       -- message to display (default '')
    """

17
PEP257 нічого не повідомляє про фактичне форматування частини аргументу. Він просто зазначає, що слід писати, і наводить приклад. Але це лише приклад. Тому я б остаточно радив використовувати конвенцію Сфінкса, оскільки ви не порушите PEP257, а ви використовуєте форматування, яке могло б розібрати сфінкс.
vaab

7
За винятком того, що перша документація, представлена ​​вище, є некрасивою і містить багато зайвої інформації для людей. Я б скоріше скористався умовою, яка робить мій вихідний код приємним для читання, не спершу розбираючись
confused00

1

Подивіться на Documenting Python , сторінку, "націлену на авторів та потенційних авторів документації для Python".

Коротше кажучи, reStructuredText - це те, що використовується для документування самого Python. Посібник розробника містить ґрунтовку, що відповідає решті, посібник зі стилів та загальні поради щодо написання гарної документації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.