Python 3.12+astпонятие
ast.TypeVar
параметры типов
Узел параметра типа T в квадратных скобках def f[T](), class C[T], type A[T] (Python 3.12): name, bound и с 3.13 default_value.
Синтаксис
ast.TypeVar(name, bound=None, default_value=None)
name здесь — строка, а не Name. В поле bound лежит и граница T: int (Name), и набор ограничений T: (int, str) — тогда это Tuple, так что «верхняя граница» и «перечень допустимых типов» различаются только типом узла. Поле default_value для T = int добавлено в 3.13; на 3.12 его нет вовсе. Старый способ T = TypeVar('T') в ast — обычный Assign с Call.
Примеры
import ast
f = ast.parse('def first[T: int](xs: list[T]) -> T: ...').body[0]
tv = f.type_params[0]
print(type(tv).__name__, tv.name, tv.bound.id) # → TypeVar T int
c = ast.parse('class Box[T: (int, str)]: pass').body[0]
print(type(c.type_params[0].bound).__name__) # → Tuple
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности