#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
выходных данных.