Что такое дженерики (Generics) в Python и для чего они используются

Ответ

Дженерики (Generics) в Python — это инструмент системы статической типизации (typing), который позволяет создавать функции, классы и псевдонимы типов, способные работать с различными, заранее не определенными типами данных, сохраняя при этом строгую проверку типов.

Основная цель — написание переиспользуемого и типобезопасного кода. Статические анализаторы, такие как mypy, могут отслеживать типы и предотвращать ошибки еще до запуска программы.

Для создания дженериков используется TypeVar.

Практический пример:

Предположим, нам нужна функция, которая возвращает первый элемент из любого списка, будь то список строк или чисел. Без дженериков мы бы потеряли информацию о типе.

from typing import TypeVar, List

# 1. Создаем переменную типа (Type Variable)
# Она будет служить "заполнителем" для конкретного типа (int, str и т.д.)
T = TypeVar('T')

# 2. Используем T в аннотациях функции
# Функция принимает список элементов типа T и возвращает один элемент типа T
def get_first_element(items: List[T]) -> T:
    if not items:
        raise ValueError("Список не может быть пустым")
    return items[0]

# --- Использование ---

# mypy поймет, что first_num имеет тип int
numbers = [10, 20, 30]
first_num = get_first_element(numbers)
print(f"Первое число: {first_num}")

# mypy поймет, что first_str имеет тип str
strings = ["apple", "banana", "cherry"]
first_str = get_first_element(strings)
print(f"Первая строка: {first_str}")

# mypy выдаст ошибку, если мы попытаемся присвоить результат неверному типу
# error: Incompatible types in assignment (expression has type "int", variable has type "str")
# invalid_assignment: str = get_first_element(numbers)

Таким образом, дженерики позволяют создавать гибкие и в то же время строго типизированные компоненты, что повышает надежность и читаемость кода.