Как писать осмысленные комментарии?
что, на ваш взгляд, является значимой docstring? Что вы ожидаете там описать?
например, рассмотрим этот класс Python __init__
:
def __init__(self, name, value, displayName=None, matchingRule="strict"):
"""
name - field name
value - field value
displayName - nice display name, if empty will be set to field name
matchingRule - I have no idea what this does, set to strict by default
"""
вы находите в этом смысл? Опубликуйте свои хорошие / плохие примеры, чтобы все знали (и общий ответ, чтобы его можно было принять).
7 ответов
Я согласен с "все, что вы не можете сказать из подписи метода". Это также может означать объяснение того, что возвращает метод/функция.
вы также можете использовать Сфинкс (и синтаксис reStructuredText) для целей документации внутри ваших docstrings. Таким образом, вы можете включить это в документацию. Например, проверьте, например repoze.bfg который широко использует это (пример файла, документация пример).
еще одна вещь, которую можно поместить в docstrings, также doctests. Это может иметь смысл ЭСП. для модуля или класса docstrings, как вы также можете показать, как использовать его и иметь этот тестируемый в то же время.
с PEP 8:
соглашения для написания хороших строк документации (a.к. a. "комментарии") увековечены в PEP 257.
- запись docstrings для всех общедоступных модулей, функций, классов и методов. Комментарии не нужны для непубличных методов, но вы должен иметь комментарий, который описывает, что делает метод. Этот комментарий должен появиться после строки "def".
- Пеп 257 описывает хорошие соглашения docstring. Обратите внимание, что самое главное,"", который заканчивается многострочной docstring должен быть на строка сама по себе, и предпочтительно перед пустой строкой.
- для одного лайнера docstrings, это нормально, чтобы держать закрытие "" на той же линии.
Что будет:
все, что вы не можете сказать из сигнатуры метода. В этом случае полезен только бит: displayName - если пусто будет установлено в поле name.
Проверьте docstrings numpy для хороших примеров (например,http://github.com/numpy/numpy/blob/master/numpy/core/numeric.py).
docstrings разделены на несколько разделов и выглядят следующим образом:
Compute the sum of the elements of a list.
Parameters
----------
foo: sequence of ints
The list of integers to sum up.
Returns
-------
res: int
sum of elements of foo
See also
--------
cumsum: compute cumulative sum of elemenents
самые поразительные вещи, которые я могу придумать, чтобы включить в docstring, - это то, что не очевидно. Обычно это включает в себя информацию о типе или требований - например. "Требуется файлоподобный объект". В одних случаях это будет видно из подписи, в других-нет.
еще одна полезная вещь, которую вы можете положить в вашем комментарии-это doctest
.
Мне нравится использовать документацию, чтобы описать как можно более подробно, что делает функция, особенно поведение в угловых случаях (a.к. a. edge cases). В идеале программист, использующий функцию, никогда не должен смотреть на исходный код - на практике это означает, что всякий раз, когда другой программист должен смотреть на исходный код, чтобы выяснить некоторые детали того, как работает функция, эта деталь, вероятно, должна была быть упомянута в документации. Как сказал Фредди, все, что угодно. это не добавляет никаких деталей к подписи метода, вероятно, не должно быть в строке документации.
обычно цель добавления строки doc при запуске функции-описать функцию, что она делает, что она возвращает, и описание параметров. При необходимости можно добавить сведения о реализации. Еще вы можете добавить информацию об авторе, который написал код для будущих разработчиков.