← Назад к вопросам

Что такое T: int?

2.0 Middle🔥 121 комментариев
#Python Core#Soft Skills

Комментарии (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 используется для:

  1. Документирования кода — явно указываем ожидаемый тип
  2. IDE поддержки — автодополнение и подсказки в редакторе
  3. Статического анализа — выявления ошибок типов до запуска
  4. Рефакторинга — более безопасное изменение кода
  5. Обобщённого программирования — создание универсальных функций и классов

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

Что такое T: int? | PrepBro