Python Glossary English

Python 3.12+Аннотации и typingконструкция

Параметры типа [T]

синтаксис

def f[T](x: T) -> T и class Box[T] объявляют обобщённые функции и классы прямо в заголовке, без TypeVar и Generic (Python 3.12+).

Синтаксис

def имя[T](x: T) -> T: ...
class Имя[T]: ...
class Имя[T: Ограничение, *Ts, **P]: ...

Главная ловушка: T видно только внутри своей функции или класса — снаружи это NameError, а не общая переменная модуля, как при T = TypeVar('T'). Тип во время выполнения не проверяется: first(['a']) отработает, как бы ни была аннотирована функция. Значения по умолчанию [T = int] появились только в 3.13; для старых версий остаются TypeVar и Generic[T].

Примеры

# Python 3.12+
def first[T](items: list[T]) -> T:
    return items[0]
print(first([3, 1]))  # → 3
print(first.__type_params__)  # → (T,)
print(T)  # → NameError
# Python 3.12+
class Box[T]:
    def __init__(self, item: T):
        self.item = item
print(Box[int])  # → __main__.Box[int]
print(Box('a').item)  # → a — тип не проверяется
# Python 3.13+
class Box[T = int]:
    pass
print(Box.__type_params__[0].__default__)  # → <class 'int'>

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности