Оператор 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.