Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Тип Annotation T: int
T: int — это type hint (аннотация типа) в Python, которая явно указывает, что переменная T имеет тип int. Это часть системы типизации Python, введённой в PEP 484, которая помогает разработчикам и инструментам анализа кода лучше понимать и проверять типы данных.
Основное использование
# Простая аннотация переменной
T: int = 42
print(type(T)) # <class 'int'>
# Эта запись эквивалентна
T = 42 # без аннотации
# Но с аннотацией проверяющие инструменты (mypy, pyright) знают тип
Отличие от присваивания типа
Важно понимать, что аннотация типа не усиливает проверку на этапе выполнения:
T: int = 42 # Аннотация: T имеет тип int
T = "строка" # Это допустимо! Аннотация — только подсказка для инструментов
print(T) # "строка" — отлично сработает
# Но статический анализатор (mypy) выведет warning
# error: Incompatible types in assignment (expression has type "str", variable has type "int")
Использование в функциях
# Аннотация параметра и возвращаемого значения
def add(a: int, b: int) -> int:
"""Складывает два целых числа."""
return a + b
# Использование
result: int = add(5, 3) # result имеет тип int
print(result) # 8
TypeVar для обобщённых типов
Очень часто T: int появляется в контексте TypeVar — переменной типа:
from typing import TypeVar
# T — переменная типа, ограниченная int
T = TypeVar('T', bound=int)
# Функция, работающая с любым типом, производным от int
def process(value: T) -> T:
return value * 2
result = process(10) # Возвращает 20
Обобщённые функции с несколькими типами
from typing import TypeVar, Generic
T = TypeVar('T') # Без ограничений
def get_first_item(items: list[T]) -> T:
"""Возвращает первый элемент списка."""
return items[0]
# Использование
nums = [1, 2, 3]
first: int = get_first_item(nums) # Тип автоматически inferred
print(first) # 1
Классы с общим типом
from typing import TypeVar, Generic
T = TypeVar('T')
class Container(Generic[T]):
def __init__(self, value: T):
self.value: T = value
def get(self) -> T:
return self.value
# Использование
int_container: Container[int] = Container(42)
result = int_container.get() # Тип: int
str_container: Container[str] = Container("hello")
message = str_container.get() # Тип: str
Ограничение типов (Bounded TypeVar)
from typing import TypeVar
# T может быть только int или float
T = TypeVar('T', int, float)
def multiply(a: T, b: T) -> T:
return a * b
result1 = multiply(3, 4) # int
result2 = multiply(3.5, 2.0) # float
# multiply("a", "b") # Ошибка типа!
Проверка типов с mypy
# Установка
pip install mypy
# Проверка файла
mypy script.py
# Проверка с строгим режимом
mypy --strict script.py
Пример с mypy
# script.py
T: int = 42
T = "string" # Ошибка типа
def add(a: int, b: int) -> int:
return a + b
add("1", "2") # Ошибка типа
$ mypy script.py
script.py:2: error: Incompatible types in assignment (expression has type "str", variable has type "int")
script.py:7: error: Argument 1 to "add" has incompatible type "str"; expected "int"
Практическое значение
T: int используется для:
- Документирования кода — явно указываем ожидаемый тип
- IDE поддержки — автодополнение и подсказки в редакторе
- Статического анализа — выявления ошибок типов до запуска
- Рефакторинга — более безопасное изменение кода
- Обобщённого программирования — создание универсальных функций и классов
Тип аннотация не влияет на производительность, так как игнорируется интерпретатором во время выполнения, но значительно улучшает качество и надёжность кода.