Сообщить об ошибке.

Класс TypeAliasType модуля typing в Python

Тип псевдонимов типов в Python

Синтаксис:

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')

Распаковка (Unpacking) для типа 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]]