Python - Вручную выполнить ограничения ввода с использованием классов ввода - PullRequest
0 голосов
/ 25 января 2019

Я хочу проверить тип некоторого параметра, предпочтительно используя typing определения

например:

from typing import List, Dict

def func(param1, param2):
     assert param1 is of type Dict[str, int] # How can this be done?
     assert param2 is of type List[Any] # How can this be done?

Это легко для не сложных типов. assert isinstance(param1, str)

Вопрос, очевидно, упрощен, чтобы прояснить его

Ответы [ 2 ]

0 голосов
/ 25 января 2019

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

0 голосов
/ 25 января 2019

В соответствии с вводом , это только для того, чтобы сделать подсказки типов более читабельными, и Python фактически не проверяет проверки типов.

Поскольку списки и словари могут содержать произвольные типы (для диктов)они должны быть хэшируемыми (но все же «почти произвольными»), единственный способ сделать это - перебрать коллекцию и проверить каждый элемент.

assert isinstance(param1, dict)
for k, v in param1.items():
    assert isinstance(k, str)
    assert isinstance(v, int)
...