Python 3.9+Встроенные типыпонятие
types.GenericAlias
типы аннотаций
Тип выражения вроде list[int]: параметризованный встроенный класс для аннотаций, хранящий исходный класс и аргументы типа.
Синтаксис
list[int] # → types.GenericAlias
list[int] не создаёт новый класс и ничего не проверяет во время выполнения: list[int]([1, 'a']) спокойно вернёт список со строкой. В isinstance такой объект передать нельзя — будет TypeError, проверяйте isinstance(x, list). Исходный класс и аргументы достают typing.get_origin и typing.get_args. С Python 3.9 встроенные коллекции поддерживают такую запись сами, без typing.List.
Примеры
import types
import typing
alias = list[int]
print(type(alias) is types.GenericAlias) # → True
print(typing.get_origin(alias), typing.get_args(alias)) # → <class 'list'> (<class 'int'>,)
print(alias([1, 'a'])) # → [1, 'a'] — тип элементов не проверяется
isinstance([], list[int]) # → TypeError: параметризованный тип в isinstance нельзя
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности