Python 3.6+Аннотации и typingконструкция
Аннотация переменной
синтаксис
Запись x: int = 1 — подсказка типа для переменной или атрибута класса. Интерпретатор её не проверяет, читают её mypy, IDE и dataclass.
Синтаксис
имя: тип = значение
имя: тип
Главная ловушка: аннотация не проверяется во время выполнения — x: int = "abc" отработает без ошибки, ловит такое только mypy или IDE. Вторая: x: int без = ничего не присваивает, и обращение к x даёт NameError. В классе аннотация без значения попадает в __annotations__, но атрибутом не становится — именно эти записи читает @dataclass, чтобы построить поля.
Примеры
x: int = 'abc'
print(x) # → abc — тип не проверяется
count: int
print(count) # → NameError
class Point:
x: int
y: int = 0
print(Point.__annotations__) # → {'x': <class 'int'>, 'y': <class 'int'>}
print(hasattr(Point, 'x'), Point.y) # → False 0
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности