← Все вопросы

Проверяются ли аннотации типов в функции во время выполнения?

Задан 3 месяца назад478 просмотров3 ответа
8

Написал функцию с подсказками типов:

def add(a: int, b: int) -> int:
    return a + b

add("x", "y")  # ?

Я думал, что передать строки нельзя — но код отработал и вернул 'xy'. Получается, аннотации вообще ни на что не влияют во время выполнения?

3 ответа

16
✓ Принятый ответ — помог автору

Да, во время выполнения Python аннотации не проверяет — они чисто декоративные и нужны людям и инструментам. Поэтому add("x", "y") спокойно сложил строки в 'xy'.

Пользу аннотации дают в связке с внешними инструментами: статический анализатор mypy (или встроенный type checker в IDE вроде PyCharm/VS Code) заранее подсветит, что ты передаёшь str туда, где ждут int. Доступны аннотации в рантайме через add.__annotations__, и некоторые библиотеки (например, dataclasses, pydantic) их читают и используют, но сам интерпретатор их не навязывает.

Svyatoslav Makarov pydantic как раз валидирует по аннотациям, но это уже сторонняя библиотека, а не сам Python · 3 месяца назад
7

Нет, не проверяются. Это подсказки для mypy и IDE, рантайму на них всё равно.

3

Подсказки, а не проверки.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект