Как проверить переменную на соответствие типу Union во время выполнения?Python

Программы на Python
Anonymous
Как проверить переменную на соответствие типу Union во время выполнения?

Сообщение Anonymous »

Я пытаюсь написать декоратор функции, который использует подсказки типов Python 3.6, чтобы проверять, что словарь аргументов соответствует подсказкам типов, и, если нет, выдает ошибку с четким описанием проблемы, которая будет использоваться для HTTP API.
Проблема в том, что когда функция имеет параметр, использующий тип Union, я не могу проверить переменную по нему во время выполнения.
Например, у меня есть такая функция

Код: Выделить всё

from typing import Union
def bark(myname: str, descr: Union[int, str], mynum: int = 3) -> str:
return descr + myname * mynum
Я могу:

Код: Выделить всё

isinstance('Arnold', bark.__annotations__['myname'])
Но нет:

Код: Выделить всё

isinstance(3, bark.__annotations__['descr'])
Поскольку Union нельзя использовать с isinstance или issubclass.
Мне не удалось найти способ проверить это с помощью объекта типа.
Я пытался реализовать проверку самостоятельно, но пока bark.__annotations__['descr'] отображается как typing.Union[int, str] в REPL я не могу получить доступ к списку типов во время выполнения, если не использую уродливый хак проверки bark.__annotations__['descr'].__repr__().
Есть ли правильный способ получить доступ к этой информации? Или он намеренно не предназначен для легкого доступа во время выполнения?

Подробнее здесь: https://stackoverflow.com/questions/459 ... ng-runtime

Вернуться в «Python»