Получить доступ

Что такое аннотации типов и проверяются ли они при выполнении?

JuniorОкружение и инструменты
Ещё спрашивают так:
  • Зачем нужны type hints в Python?
  • Что такое mypy?
  • Как указать, что значение может быть None?
Коротко

Аннотации — подсказки о типах для людей и инструментов; интерпретатор их не проверяет.

  • Проверяют статические анализаторы: mypy, pyright; IDE берут их для автодополнения
  • Современная запись: list[int] (3.9+), int | None (3.10+)

А ещё Проверка во время выполнения — только явно: pydantic, свой isinstance

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Аннотации пишутся у параметров, возвращаемого значения и переменных: def greet(name: str) -> str. Python сохраняет их в __annotations__, но передать в функцию число вместо строки он не помешает — ошибка проявится только там, где код реально не сможет работать с числом.

Зачем они нужны:

  • статическая проверка — mypy или pyright находят ошибки типов до запуска, в том числе в CI;
  • IDE — точное автодополнение и навигация;
  • документация — сигнатура говорит, что функция принимает и возвращает;
  • библиотеки читают их во время выполнения: dataclasses, pydantic, FastAPI проверяют и преобразуют данные по аннотациям.

Основные конструкции:

  • коллекции: list[str], dict[str, int], tuple[int, ...];
  • значение или None: str | None (раньше Optional[str]);
  • несколько типов: int | str;
  • вызываемые объекты: Callable[[int], str];
  • Any — отключить проверку для значения;
  • Protocol — утиная типизация: «любой объект с методом read».

Пример

from dataclasses import dataclass

def find_user(user_id: int) -> "User | None":
    ...

@dataclass
class User:
    id: int
    name: str
    tags: list[str]

def total(prices: dict[str, float]) -> float:
    return sum(prices.values())

total({"кофе": 250.0})      # mypy: ок
total(["кофе"])             # mypy: ошибка ещё до запуска; Python упадёт только на .values()

Что хотят услышать

  • Аннотации не проверяются интерпретатором.
  • Кто их использует: анализаторы, IDE, библиотеки.
  • Базовый синтаксис коллекций и X | None.
  • Знание mypy или pyright.

Частые ошибки

  • «Если указать тип, Python не даст передать другой».
  • Злоупотреблять Any — проверка теряет смысл.

Что спросят дальше

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем