Python 3.5+typingпонятие
typing.NewType
обобщения и параметры
Фабрика различимых типов-псевдонимов: создаёт «отдельный» тип поверх базового для проверки типов; во время выполнения вызов возвращает аргумент как есть.
Синтаксис
UserId = typing.NewType('UserId', int)
NewType живёт только для проверяльщика типов: во время выполнения UserId — не класс, isinstance с ним падает, наследоваться от него нельзя, и никакой валидации он не делает. Смысл — отличать UserId от обычного int: простой псевдоним UserId = int взаимозаменяем с int, а NewType заставит проверяльщик ругаться на перепутанные значения.
Примеры
from typing import NewType
UserId = NewType('UserId', int)
print(UserId(5)) # → 5
print(type(UserId(5))) # → <class 'int'>
print(UserId.__name__, UserId.__supertype__) # → UserId <class 'int'>
print(UserId(5) + 1) # → 6
print(isinstance(5, UserId)) # → TypeError
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности