Что это за строки в кавычках в определении класса?

#python #python-3.x

#python #python-3.x

Вопрос:

Я смотрю на некоторый код Python, в котором строки в кавычках используются в определении класса так, как я раньше не видел:

 class Foo:
    """
    Docstring for the class. This one I understand, of
    course. I'm wondering about the two strings below.
    """

    one: str
    "One thing."
    another: str
    "Another thing."

    def __init__(self):
    # etc, etc.
  

Для чего нужны эти последние две строки в кавычках? Я предполагаю, что среда выполнения Python игнорирует их, и есть какой-то внешний инструмент, который их использует?

Комментарии:

1. Если бы в коде вместо одинарных кавычек использовались тройные кавычки, это была бы строка документа, хотя они должны идти перед переменной, а не после. Его целью было бы описать назначение переменной. Как и сейчас, эти строки игнорируются. Их тоже можно игнорировать.

2. @FrankYellin: Тройные кавычки не имеют ничего общего со строками документов. Строки документации могут использовать любую форму строкового литерала (хотя f-строки не учитываются).

3. @user2357112supportsMonica python.org/dev/peps/pep-0257 предполагает, что строки документа всегда должны заключаться в тройные кавычки. Да, вы правы, что это предложение, а не требование.

Ответ №1:

Вероятно, это для Sphinx autodoc. Python игнорирует их — сам Python не поддерживает docstrings для атрибутов — но Sphinx autodoc распознает строковый литерал после определения атрибута в качестве документации для этого атрибута. Я думаю, что аннотации, вероятно, имеют значение для этой цели, но у меня нет настроек для его тестирования.

Комментарии:

1. «Python игнорирует их» -> строго говоря, разве Python не создает эти строки при выполнении определения класса?

2. @snakecharmerb: Строго говоря, они оптимизируются. Я не знаю, где это происходит в текущей реализации, но вы можете видеть, что строки нет в dis.dis выходных данных.