Делаем python типизирующими генерики с индексами (экземпляр) проверяемыми - PullRequest
1 голос
/ 18 июня 2020

Я бы хотел иметь возможность повторно использовать typing намного больше, а именно для проверки типов, и желательно таким образом, чтобы это соответствовало обычному способу проверки, имеет ли что-то тип ...

(Мой) идеальный вариант - иметь возможность делать что-то вроде:

from typing import Union, Iterable, Any, Mapping

KeysType = checkable(Union[Iterable[str], Mapping[str, Any]])

assert isinstance(['foo', 'bar'], KeysType)
assert not isinstance([3, 'foo', 'bar'], KeysType)
assert isinstance({'foo': 1, 'bar': 2}, KeysType)
assert isinstance({0: 0, 'foo': 1, 'bar': 2}, KeysType)
assert not isinstance(5, KeysType)

Конечно, что-то не так, потому что я использую isinstance для обозначения has_interface_of или has_compatible_stucture. Когда wi sh беспокоит меня, я говорю себе следующее:

from collections.abc import Mapping
isinstance(dict(), Mapping)

И все же dict не является экземпляром Mapping.

Тем не менее, даже пользовательская функция is_sorta_like_this_type вместо функции isinstance подойдет, если подключение к поведению isinstance - это слишком пугающая аберрация.

Подобные вопросы имеют было задано в stackoverflow, но ни один из предложенных ответов меня не вполне удовлетворит - хотя это один , хоть и хакерский, но самый близкий, что у меня есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...