Docstring в Django

В коде уроков и заданий вы постоянно встречаете комментарии — подсказки или пояснения к коду. Строки комментариев не обрабатываются в Python и предназначены исключительно для разработчика.Есть и другой способ документирования кода. Загляните в любой файл Django, например. в shortcuts.py из пакета shortcuts. В начале файла и в теле функций вы увидите блоки текста, обрамлённые тройными кавычками.

"""
This module collects helper functions and classes that "span" multiple levels
of MVC. In other words, these functions/classes introduce controlled coupling
for convenience's sake.
"""
...

def render(...):
    """
    Return a HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    """
    ... 

Это docstring, «строка документации», в ней автор кода описывает содержимое модуля, функции или класса; такое описание позволяет другим разработчикам понять, что делает тот или иной код, не исследуя его.

Что и как можно документировать

Принято писать документацию для публичных функций, методов и классов. Иногда в docstring описывают весь модуль целиком. Вот как может выглядеть документированный код:

"""Документация модуля. Описывает работу классов и функций. 
Размещается в верхней части файла (начиная с 1-й строки).
"""


def foo(self):
    """Описывает работу функции foo."""
    ...


class Test:
    """Класс Test используется для демонстрации docstring. 
    После этой строки нужна пустая строка, поскольку методы в классе 
    отделяются одной пустой строкой.
    """
        
    def first(self):
        """Описывает метод first и демонстрирует перенос строки 
        документации.
        """
        ...
 

Строки документации пишутся по определённым правилам. Соблюдение этих правил упростит чтение вашей документации и, дополнительно, создаст вам хорошую репутацию в команде. Правила оформления docstring описаны в стандарте PEP257.

Основные правила оформления docstring

  • После первых тройных кавычек """ не должно быть пробела.
  • Докстринг начинается с заглавной буквы и заканчивается точкой.
"""Возвращает число 1."""
 
  • Если строка документации не умещается на одну строку — можно её перенести. Отступы на новой строке должны выровнять текст по кавычкам.
def foo():
    """Можно перенести
    так.
    """


def bar():
    """
    А можно - 
    так.
    """ 
  • Если документируется класс — после строки документации оставляется пустая строка. В остальных случаях код должен начинаться сразу после докстринга.

Существуют разные стили оформления строк документации. Вот самые популярные:

В учебных проектах Яндекс.Практикума строгое соблюдение стиля необязательно, достаточно коротко на русском (или английском) языке описать принцип работы документируемого кода.

Как можно вызвать docstring

По сравнению с обычными комментариями docstring обладает серьёзным преимуществом: к нему можно обратиться программно. Например, можно вызвать в консоль docstring импортируемой функции, не открывая файл, в котором эта функция хранится. С обычными комментариями такой номер не пройдёт.Самый простой способ получить docstring из какого-то объекта — использовать атрибут doc. Python автоматически создаёт этот атрибут для любого объекта.Откройте пустой файл в редакторе и запустите этот код:

import math

# Спросим, что хорошего в этой библиотеке
print(math.__doc__)

# Будет напечатано:
# This module provides access to the mathematical functions
# defined by the C standard. 

Посмотрите docstring функции sqrt() из библиотеки math, его можно вызвать через math.sqrt.__doc__. У встроенной функции print() тоже есть докстринг, и в нём может оказаться что-нибудь интересное.Вызвать документацию можно из любого объекта, важно лишь правильно указать этот объект. Скопируйте и запустите код, посмотрите, как он выведет документацию для разных объектов:

"""Документация модуля. Описывает работу классов и функций. 
Размещается в верхней части файла (начиная с первой строки).
"""
def tricky_func(self):
    """Описывает работу функции tricky_func."""
    ...


class Test:
    """Класс Test используется для демонстрации docstring."""

    def first(self):
        """Описывает метод first и демонстрирует перенос строки 
        документации.
        """
        ...


print(__doc__)
print(tricky_func.__doc__)
print(Test.__doc__)
print(Test.first.__doc__) 

Чтобы избавиться от пробелов при печати многострочных докстрингов, можно применить метод cleandoc() из модуля inspect.

"""Документация модуля. Описывает работу классов и функций. 
Размещается в верхней части файла (начиная с первой строки).
"""
import inspect


def tricky_func(self):
    """Описывает работу функции tricky_func."""
    ...


class Test:
    """Класс Test используется для демонстрации docstring."""

    def first(self):
        """Описывает метод first и демонстрирует перенос строки 
        документации.
        """
        ...


print("Без применения cleandoc:")
print(Test.first.__doc__)
print("С применением cleandoc:")
print(inspect.cleandoc(Test.first.__doc__)) 

Стиль леди и джентльменов

Документировать код необязательно, программа будет работать и без этого. Однако docstring применяют во всех крупных проектах.Код читают намного чаще, чем пишут, и docstring помогает в чтении. Докстринг — это и признак уважения и реальная помощь коллегам, работающим с вашим кодом; это признак хорошего тона и профессионализма.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: