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

Псевдонимы универсального типа в Python

Оператор type можно использовать для создания псевдонима универсального типа:

# Новое в Python 3.12.
type ListOrSet[T] = list[T] | set[T]

За исключением ленивой оценки значения, этот код эквивалентен:

annotation-def TYPE_PARAMS_OF_ListOrSet():
    T = typing.TypeVar("T")

    annotation-def VALUE_OF_ListOrSet():
        return list[T] | set[T]
    # In reality, the value is lazily evaluated
    return typing.TypeAliasType("ListOrSet", VALUE_OF_ListOrSet(), type_params=(T,))
ListOrSet = TYPE_PARAMS_OF_ListOrSet()

Здесь annotation-def (не настоящее ключевое слово) указывает область видимости аннотации. , которая фактически не привязана ни к какому имени во время выполнения.

Имена с заглавной буквы, такие как TYPE_PARAMS_OF_ListOrSet, также не привязываются во время выполнения программы.

Синтаксис не проходит через доступ к атрибутам модуля typing, а создает экземпляр typing.TypeVar напрямую.

Новое в Python 3.12.