import typing # Новое в Python 3.12. typing.TypeAliasType(name, value, *, type_params=())
Класс typing.TypeAliasType() модуля typing представляет собой тип псевдонимов типов, созданных с помощью оператора type.
>>> type Alias = int >>> type(Alias) # <class 'typing.TypeAliasType'>
typing.TypeAliasType() имеет следующие атрибутыTypeAliasType.__name__:TypeAliasType.__name__ представляет собой имя псевдонима типа:
>>> type Alias = int >>> Alias.__name__ # 'Alias'
TypeAliasType.__module__:TypeAliasType.__module__ представляет собой имя модуля, в котором был определен псевдоним типа:
>>> type Alias = int >>> Alias.__module__ # '__main__'
TypeAliasType.__type_params__:TypeAliasType.__type_params__ представляет собой параметры типа псевдонима типа или пустой кортеж, если псевдоним не является универсальным:
>>> type ListOrSet[T] = list[T] | set[T] >>> ListOrSet.__type_params__ # (T,) >>> type NotGeneric = int >>> NotGeneric.__type_params__ # ()
TypeAliasType.__value__:TypeAliasType.__value__ представляет собой значение псевдонима типа. Вычисляется лениво, поэтому имена, используемые в определении псевдонима, не разрешаются до тех пор, пока не будет получен доступ к атрибуту __value__:
>>> type Mutually = Recursive >>> type Recursive = Mutually >>> Mutually # Mutually >>> Recursive # Recursive >>> Mutually.__value__ # Recursive >>> Recursive.__value__ # Mutually
TypeAliasType.evaluate_value():Добавлено в Python 3.14.
Функция вычисления, соответствующая атрибуту TypeAliasType.__value__. При прямом вызове этот метод поддерживает только формат VALUE, что эквивалентно прямому доступу к атрибуту __value__, но объект метода может быть передан в annotationlib.call_evaluate_function() для вычисления значения в другом формате:
from typing import TypeAliasType from annotationlib import Format, call_evaluate_function # Создание псевдонима типа с неопределенным значением try: type Alias = undefined Alias.__value__ except NameError as e: print(f"NameError: {e}") # Использование evaluate_value с разными форматами try: Alias.evaluate_value(Format.VALUE) except NameError as e: print(f"NameError: {e}") # Отложенное вычисление forward_ref = call_evaluate_function(Alias.evaluate_value, Format.FORWARDREF) print(forward_ref) # ForwardRef('undefined')
typing.TypeAliasTypeДобавлено в Python 3.14.
Это функциональность Python 3.14, которая позволяет использовать синтаксис *Alias для распаковки псевдонимов типов, что эквивалентно использованию Unpack[Alias].
Пример показывает, как можно распаковывать псевдоним типа Alias = tuple[int, str] внутри другого кортежа: tuple[bool, *Alias] становится tuple[bool, typing.Unpack[Alias]].
type Alias = tuple[int, str] type Unpacked = tuple[bool, *Alias] Unpacked.__value__ # tuple[bool, typing.Unpack[Alias]]