Python Glossary English

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Сообщить о неточности