Получить значения объединения из аннотаций функций?

#python #annotations #python-typing

Вопрос:

Я хочу получить аннотации функций, в частности значения объединения каждой аннотации. Позвольте мне показать пример:

 from typing import Union

async def func(arg1: str, arg2: int, arg3: Union[str, int]):
    ...

# Want to get
# {arg3: [str, int], arg1: str, ...}
 

Я знаю func.__annotations__ , что возвращает диктант, но я не уверен в типах юнионов

Ответ №1:

Воспользуйся typing.get_args :

 >>> func.__annotations__['arg3']
typing.Union[str, int]
>>> from typing import get_args
>>> get_args(func.__annotations__['arg3'])
(<class 'str'>, <class 'int'>)