Этап 9 из 11 · ≈ 4 ч

Аннотации типов

Основа с Junior

Type hints, дженерики и Protocol, проверка mypy и pyright.

Что важно знать

  • Аннотации не проверяются при выполнении — их проверяет анализатор.
  • X | None, list[int], TypedDict, Literal.
  • Protocol — структурная типизация.

Критерии освоения

Junior ≈ 4 ч

  • Аннотирует функции и классы и проверяет код mypy или pyright

Практика. Аннотировать учебный проект и добиться прохождения mypy в строгом режиме.

Middle ≈ 4 ч

  • Использует TypeVar, Generic и Protocol для обобщённого кода

Практика. Описать интерфейс репозитория через Protocol и сделать две реализации с проверкой типов.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

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

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

Полный разбор
Как в аннотациях Python описать обобщённые типы — TypeVar, Generic, Protocol?Middle

TypeVar — параметр типа: функция first(xs: list[T]) -> T сохраняет связь «что пришло, то и вернулось». Generic — обобщённый класс. С Python 3.12 — новый синтаксис: def first[T](xs: list[T]) -> T и class Box[T]. Проверяют их mypy и pyright, интерпретатор…

Полный разбор
Как аннотировать списки, словари, необязательные значения и объединения типов?Junior

Коллекции: list[int], dict[str, float], set[str], tuple[int, str] (фиксированный) и tuple[int, ...] (любой длины) — встроенные типы в скобках с Python 3.9. Необязательное значение — int | None (3.10+, раньше Optional[int]). Объединение — int | str. Функция …

Полный разбор
Как подключить проверку типов mypy или pyright к проекту?Junior

mypy и pyright — статические анализаторы: читают код и аннотации без запуска и находят несоответствия типов (передали str вместо int, забыли проверить None, вызвали несуществующий метод). Ставят как зависимость разработки, настраивают в pyproject.toml и…

Полный разбор
Как проверять входные данные с помощью Pydantic?Junior

Pydantic проверяет и преобразует данные во время выполнения по аннотациям класса-наследника BaseModel: строку «42» превратит в int, а «abc» для int отклонит с понятной ошибкой ValidationError, где указано поле и причина. Ограничения задают через Field…

Полный разбор
Чем dataclass отличается от namedtuple и Pydantic-модели?Middle

@dataclass генерирует __init__, __repr__, __eq__ (опционально порядок, хеш, слоты) по аннотированным полям — обычный изменяемый класс без проверки типов. namedtuple — неизменяемый кортеж с именами полей, индексируется и распаковывается. Pydantic — валидация и…

Полный разбор
Чем абстрактный базовый класс (ABC) отличается от Protocol?Middle

ABC — номинальная типизация: класс должен явно наследовать абстрактный класс, а нереализованные @abstractmethod не дадут создать экземпляр. Protocol (3.8) — структурная: подходит любой класс с нужными методами без наследования, проверку делает mypy или…

Полный разбор

Разборы темы

← Вся карта «Python»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования