Блог
Python
Типизация и type hints в Python: как читать на собеседовании

Типизация и type hints в Python: как читать на собеседовании

Типизация в Python — тема, которая на собеседовании внешне выглядит простой, но проверяет понимание философии языка. Python остаётся динамически типизированным языком, но type hints (аннотации типов) стали фактическим стандартом в коммерческой разработке, и умение их читать и писать всё чаще ожидают даже от Junior.

Что такое type hints и зачем они нужны

def greet(name: str, age: int) -> str:
return f'{name}, тебе {age} лет'

print(greet('Анна', 28)) # Анна, тебе 28 лет

Базовые аннотации типов в функции Python
name: str и age: int — аннотации типов аргументов, -> str — аннотация типа возвращаемого значения. Важно понимать: type hints не заставляют Python проверять типы во время выполнения — вы всё ещё можете вызвать greet(123, 'abc'), и код не упадёт с ошибкой типа сам по себе. Type hints — это подсказка для разработчика, редактора кода и специальных инструментов статического анализа, а не встроенная защита времени выполнения.

Проверка типов — отдельный инструмент

def greet(name: str, age: int) -> str:
return f'{name}, тебе {age} лет'

greet(123, 'abc') # Python это выполнит без ошибки на этом этапе!

Аннотации не проверяются во время выполнения
Чтобы реально проверять соответствие типов, используют отдельные инструменты статического анализа — например, mypy. Они анализируют код до запуска и указывают на несоответствия аннотациям, но сам интерпретатор Python во время выполнения эти несоответствия не отслеживает.

Потренируйтесь на задачах
Python Arena — задачи по Python с автопроверкой: от основ до вопросов с собеседований.
Открыть Python Arena

Типы для коллекций

from typing import List, Dict, Optional

def get_names(users: List[Dict[str, str]]) -> List[str]:
return [user['name'] for user in users]

def find_user(user_id: int) -> Optional[str]:
users = {1: 'Анна', 2: 'Борис'}
return users.get(user_id) # вернёт None, если ключа нет

Типы для коллекций: list, dict, tuple
List[Dict[str, str]] описывает список словарей со строковыми ключами и значениями. Optional[str] означает «либо str, либо None» — распространённый паттерн для функций, которые могут не найти результат. В современных версиях Python можно писать короче, без импорта из typing: начиная с Python 3.9 — list[dict[str, str]] вместо List[Dict[str, str]] (PEP 585), а начиная с Python 3.10 — str | None вместо Optional[str] (PEP 604).

Type hints для собственных классов

class User:
def __init__(self, name: str, age: int):
self.name = name
self.age = age

def print_user(user: User) -> None:
print(f'{user.name}, {user.age}')

Аннотации типов в собственных классах
Аннотация user: User показывает, что функция ожидает именно объект класса User, а не произвольный аргумент. -> None явно указывает, что функция ничего не возвращает — это часто пропускают, хотя такая аннотация тоже часть хорошего стиля.

Частые вопросы про типизацию в Python

Заставляют ли type hints Python проверять типы во время выполнения? Нет. Type hints — это аннотации для разработчиков, редакторов кода и инструментов статического анализа вроде mypy. Сам интерпретатор Python во время обычного выполнения кода их не проверяет и не блокирует несоответствия.
Обязательно ли использовать type hints в Python? Формально нет — язык остаётся динамически типизированным без них. Но в коммерческой разработке type hints стали фактическим стандартом, потому что упрощают чтение чужого кода и ловят ошибки раньше, если использовать вместе с mypy.
Как проверить, что аннотации типов реально соблюдаются в коде? Через отдельный инструмент статического анализа, самый распространённый — mypy. Он запускается отдельно от обычного выполнения программы и анализирует код на соответствие аннотациям.
В чём разница между Optional[str] и просто str? Optional[str] означает, что значение может быть либо строкой, либо None. Просто str подразумевает, что значение всегда будет строкой. Это важное различие для функций поиска, которые могут не найти результат и вернуть None.

Закрепить типизацию на практике

mypy и Optional разбираются быстрее на своих ошибках, чем в теории. Потренироваться можно на тренажёре Python Arena от Quality Academy — 1339 задач уровней Easy/Medium/Hard/Expert, все задачи уровня Easy бесплатно. Про аннотации типов в собственных классах и ООП в целом — в статье «ООП в Python на собеседовании: что реально спрашивают».

Потренируйтесь на задачах
Python Arena — задачи по Python с автопроверкой: от основ до вопросов с собеседований.
Открыть Python Arena
Курс «Инженер по ручному тестированию»
Учим с нуля до трудоустройства: персональный ментор, задания в Jira, подготовка к собеседованиям и поддержка на испытательном сроке.
Узнать о курсе
По всем вопросам:
Quality Academy
Используя данный сайт, вы даёте согласие на использование файлов cookie.
ОК, ЗАКРЫТЬ