Какие существуют способы документирования кода в Python?

Ответ

В Python существует несколько стандартных подходов к документированию кода, которые часто используются совместно.

  1. Docstrings (Строки документации, PEP 257) Это основной способ документирования публичных API (модулей, классов, функций). Docstring — это строка, заключенная в тройные кавычки (""" или '''), которая является первым выражением в теле объекта. Она доступна во время выполнения через атрибут __doc__.

    Пример (Google Style):

    def calculate_area(width: int, height: int) -> int:
        """Вычисляет площадь прямоугольника.
    
        Args:
            width (int): Ширина прямоугольника.
            height (int): Высота прямоугольника.
    
        Returns:
            int: Площадь прямоугольника.
        """
        return width * height
    
    print(calculate_area.__doc__)
  2. Аннотации типов (Type Hints, PEP 484) Хотя основная цель аннотаций — статическая проверка типов, они также служат важной частью документации, делая код более читаемым и понятным. Они указывают ожидаемые типы аргументов и возвращаемого значения.

    from typing import List
    
    def greet_all(names: List[str]) -> None:
        for name in names:
            print(f"Hello, {name}")
  3. Внутристрочные комментарии (#) Используются для пояснения сложных или неочевидных участков кода, алгоритмов или бизнес-логики. Они не предназначены для документирования API, а для помощи разработчикам, которые будут читать исходный код.

    # Сдвигаем значение на 1 бит влево, что эквивалентно умножению на 2
    x = y << 1
  4. Инструменты для генерации документации Эти инструменты обрабатывают исходный код (в основном docstrings и аннотации типов) для создания полноценной документации в форматах HTML, PDF и других.

    • Sphinx: Самый популярный генератор. Использует формат reStructuredText (reST) и может быть расширен плагинами.
    • pydoc: Встроенный в стандартную библиотеку инструмент, который генерирует простую текстовую или HTML-документацию из docstrings (python -m pydoc my_module).

Ответ 18+ 🔞

Слушай, а вот эти ваши питонисты, они же как дети малые, блядь! Сидят, код пишут, а потом сами через месяц нихуя не понимают, что нагородили. Нужно, сука, документировать! Но не абы как, а по-взрослому, с прибабахом.

Ну, первое и главное — это Docstrings, ёпта! Строки документации, по науке. Это как паспорт у твоей функции или класса. Берёшь и пишешь прямо в теле, в тройных кавычках, первым делом. А потом её, эту строку, можно вытащить через .__doc__ и прочитать, как мантру.

Вот смотри, как это выглядит (по-гугловски):

def calculate_area(width: int, height: int) -> int:
    """Вычисляет площадь прямоугольника.

    Args:
        width (int): Ширина прямоугольника.
        height (int): Высота прямоугольника.

    Returns:
        int: Площадь прямоугольника.
    """
    return width * height

print(calculate_area.__doc__)

Видишь? Всё чётко, по полочкам: что функция делает, что жрёт на вход и что выплёвывает обратно. Красота, блядь!

Дальше, Аннотации типов. Это, сука, не просто для красоты! Хотя и для красоты тоже. Ты прямо в коде указываешь, какого хрена ждёшь: List[str], int, None. И любой, кто читает, сразу видит, куда что совать, а не гадает на кофейной гуще.

from typing import List

def greet_all(names: List[str]) -> None:
    for name in names:
        print(f"Hello, {name}")

Сразу ясно — функция жрёт список строк и нихуя не возвращает. Элементарно, Ватсон!

А вот внутристрочные комментарии (#) — это уже для особо изощрённых случаев. Когда алгоритм такой, что сам чёрт ногу сломит, или бизнес-логика, от которой волосы дыбом. Объясняешь на пальцах, что тут происходит, чтобы через полгода не охуеть от собственного кода.

# Сдвигаем значение на 1 бит влево, что эквивалентно умножению на 2
x = y << 1

Вот без этого комментария какой-нибудь джуниор будет полдня думать, нахуя тут битовый сдвиг, а не просто y * 2. А так — всё прозрачно, в рот меня чих-пых!

Ну и вершина ебли — инструменты для генерации документации. Ты накропал кучу docstrings, а они, эти инструменты, берут и делают из них целый сайт, как википедия! Sphinx — это царь и бог, самый популярный, делает всё красиво, с огоньком. А есть ещё встроенный pydoc — попроще, но тоже может из твоего модуля нагенерировать страничек, хоть завались.

Короче, если не документируешь — ты, прости, мудак. Потому что через месяц сам будешь сидеть и материться, пытаясь понять, что эта твоя функция do_magic() вообще делает. А так — открыл docstring, прочитал, и всё, ты в теме. Волшебство, блядь!