Некоторые предыстории:
Я реализую тонкий уровень проверки поверх данных dict, загруженных из файла JSON (с json.load), и я подумал об определении нескольких псевдонимов типов и кортежей типов для типов данных, которые может содержать загруженный словарь, например:
Код: Выделить всё
# in types.py
type Scalar = bool | int | str |float
SCALAR_TYPES = (bool, int, str, float)
Код: Выделить всё
def extract_scalar[T: Scalar](data: dict, key: str, expected: type[T]) -> T: ...Код: Выделить всё
def extract_scalar[T: SCALAR_TYPES](data: dict, key: str, expected: type[T]) -> T: ... Я протестировал оба подхода и убедился, что они работают с Python 3.14 как во время выполнения, так и во время статической проверки типов с помощью mypy и pyright.
Мне интересно, «разрешен» ли этот подход или полностью ли он поддерживается, и может ли он попасть в рамки лучших практик. Кажется, что это должно быть допустимо, тем более что оно предлагает более чистую альтернативу дублированию объединения типов (или кортежа) каждый раз, когда это необходимо (как, похоже, предлагает PEP 695, требуя, чтобы ограничения типа были буквальным выражением кортежа).
Мобильная версия