Ответ
Дженерики (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)
Таким образом, дженерики позволяют создавать гибкие и в то же время строго типизированные компоненты, что повышает надежность и читаемость кода.