Python 3.5+Аннотации и typingпонятие
typing.TypeVar
generics
Переменная типа для создания обобщённых функций и классов. Ограничения задаются через bound= или явный список типов.
Синтаксис
from typing import TypeVar
T = TypeVar('T')
T = TypeVar('T', bound=SomeType)
T = TypeVar('T', int, str)
Смысл TypeVar появляется только тогда, когда одна и та же переменная встречается в сигнатуре минимум дважды — так вы связываете вход с выходом. Если T стоит в одном месте, толку от него нет, это фактически то же самое, что Any. Различайте два вида ограничений: bound=X разрешает X и любых наследников, а перечисление TypeVar('T', int, str) — только ровно int или ровно str, без промежуточных вариантов. В Python 3.12 то же самое пишется короче: def first[T](lst: list[T]) -> T, без отдельного объявления переменной.
Примеры
# Python 3.9+
from typing import TypeVar
T = TypeVar('T')
def first(lst: list[T]) -> T:
return lst[0]
print(first([1, 2, 3])) # → 1
print(first(['a', 'b'])) # → 'a'
from typing import TypeVar
N = TypeVar('N', int, float)
def double(x: N) -> N:
return x * 2
print(double(3)) # → 6
print(double(1.5)) # → 3.0
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности