НОВОСТИ

Проверяет общее соответствие Python-значения аннотации типа, не перебирая коллекции рекурсивно и не изменяя значение.

На этой странице 3 раздела

Аннотации типов говорят, какое значение ожидает Python-функция или настройка. Но во время работы программы встроенный isinstance() не умеет напрямую проверять подсказки вроде «целое число или None» и list[str]. При выборе функции, регистрации плагина или чтении настройки часто нужен только быстрый ответ «подходит или нет», без полного разбора и преобразования значения.

Самописная функция приводит к разным правилам в каждом проекте. Typeguard, Beartype и Pydantic решают более широкую задачу: глубоко проверяют структуру, принудительно контролируют типы или преобразуют данные. Для простого ответа «да» или «нет» это может быть избыточно.

simtypes — Python-библиотека без зависимостей для этой конкретной проверки. Её единственная функция check() понимает обычные классы, варианты вроде int | str, необязательные значения, Any, None и внешний контейнер в подсказках вроде list[str]. Релиз доступен на GitHub.

Проверки во время выполнения

Библиотека экспортирует check(type, value) -> bool, где первым аргументом передаётся тип:

from simtypes import check

check(int, 42)                    # True
check(int | None, None)           # True
check(list[str], [1, 2, 3])       # True

Последний результат намеренный: list[str] проверяет только то, является ли значение списком. Обычные классы проходят через isinstance, а для Any, None, объединений, optional-аннотаций и внешних типов есть явные правила.

Поэтому стоимость проверки не растёт с длиной коллекции, но simtypes не подходит для недоверенных вложенных данных или полной статической аннотации.

Здесь нет обязательных зависимостей, декораторов, перехвата импортов, преобразования значений и схем: вызывающий код получает bool и сам решает, что с ним делать.

Сравнение с полноценными средствами валидации

Более широкие инструменты лучше подходят для полной валидации. Например, Runtype рекурсивно проверяет коллекции, а simtypes намеренно этого не делает.

Для одного места вызова достаточно локальной функции. simtypes полезен, когда несколько библиотек должны разделять и тестировать одну политику.

Для чего предназначен simtypes

simtypes предназначен для внутренней инфраструктуры, которой нужна быстрая проверка совместимости прямо во время работы программы. Выбор подходящей функции, регистрация плагинов и конфигурация могут использовать одно правило без полноценного фреймворка валидации.