> Что такое типизация в Python (Python)

Уровень: junior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: JetLend, TradingView, Исходный Код, Московский метрополитен, ФедяИСамат

Стек: Python

> Пример ответа

Короткий ответ

Типизация в Python - это механизм указания типов данных для переменных, аргументов функций и возвращаемых значений. Python - язык с динамической типизацией, но поддерживает необязательную статическую типизацию через аннотации типов (type hints) и модуль typing. Аннотации не влияют на runtime, но позволяют статическим анализаторам (mypy, pyright) находить ошибки до запуска кода.

Подробное объяснение

Python - динамически типизированный язык: тип переменной определяется в момент присваивания значения и может меняться. Однако с версии 3.5 появилась возможность добавлять аннотации типов.

Основные понятия:

  • Динамическая типизация - тип проверяется во время выполнения, ошибки возникают при обращении к несуществующим атрибутам или операциям.
  • Аннотации типов - синтаксис имя: тип для переменных и -> тип для возвращаемых значений функций.
  • Модуль typing - предоставляет сложные типы: List, Dict, Optional, Union, Callable, Any и другие.
  • Статическая проверка - инструменты вроде mypy анализируют код без запуска и выявляют несоответствия типов.

Аннотации - это подсказки для разработчиков и инструментов, а не строгие ограничения. Python не будет ругаться, если вы передадите str туда, где ожидается int.

На практике

В реальной разработке типизация используется для:

  • улучшения читаемости кода и самодокументирования;
  • раннего обнаружения ошибок через линтеры и CI-проверки;
  • автодополнения в IDE;
  • документирования API и контрактов между модулями.

Для типизации коллекций и сложных структур используют typing.List, typing.Dict, typing.Optional (означает Union[тип, None]), typing.Union для нескольких допустимых типов.

Пример кода

PYTHON
from typing import List, Optional, Dict
def get_user_name(user_id: int, users: Dict[int, str]) -> Optional[str]:
"""Возвращает имя пользователя по id или None."""
return users.get(user_id)
def process_items(items: List[int]) -> List[str]:
"""Принимает список чисел, возвращает список строк."""
return [str(item) for item in items]
# Пример с Union
from typing import Union
def parse_value(value: Union[int, str]) -> str:
return str(value)

Как отвечать на собеседовании

Начните с определения: Python - динамически типизированный язык с поддержкой необязательной статической типизации. Упомяните, что аннотации не влияют на производительность и не проверяются в runtime. Затем перечислите основные инструменты: typing, mypy, pyright. Приведите пример аннотации функции. Если спросят про Optional и Union - объясните разницу. Хорошо показать понимание trade-off: типизация повышает надёжность, но добавляет синтаксический шум.

Что проверяет интервьюер

Интервьюер оценивает:

  • понимание разницы между динамической и статической типизацией;
  • знание синтаксиса аннотаций;
  • знакомство с модулем typing и основными типами;
  • умение объяснить, зачем нужна типизация в динамическом языке;
  • осознание ограничений (аннотации не enforce-ятся в runtime).

Типичные ошибки

  • Утверждение, что аннотации проверяются Python при выполнении - это не так.
  • Путаница между Optional[int] и значением по умолчанию = None - это разные вещи: Optional говорит о типе, а = None - о значении.
  • Использование List из typing вместо встроенного list в новых версиях Python (3.9+), где можно писать list[int].
  • Забывают, что аннотации не обязательны и не влияют на поведение кода.
  • Переусложнение типов там, где достаточно простых аннотаций.

> Похожие задачи по Python

> Похожие задачи по backend

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью