Python 3.5+typingфункция
typing.get_type_hints
интроспекция
Возвращает словарь аннотаций объекта (функции/класса/модуля) с разрешёнными строковыми ссылками.
Синтаксис
typing.get_type_hints(obj)
Отличается от прямого чтения obj.__annotations__ тем, что вычисляет строковые аннотации в настоящие объекты: под from __future__ import annotations (PEP 563) все аннотации хранятся как строки, и get_type_hints превращает их обратно в типы (то же умеет annotationlib.get_annotations(obj, eval_str=True)), разрешая forward-ссылки в глобалах объекта (иначе NameError, если имя недоступно). Для класса вдобавок собирает аннотации по всей цепочке наследования, а метаданные Annotated по умолчанию отбрасывает — чтобы их сохранить, передай include_extras=True.
Примеры
from typing import get_type_hints
def f(x: int) -> bool: ...
print(get_type_hints(f)['x'] is int) # → True
print(get_type_hints(f)['return'] is bool) # → True
from typing import get_type_hints
def g(x: 'int') -> 'str': ...
print(g.__annotations__['x']) # → int
print(get_type_hints(g)['x'] is int) # → True
from typing import get_type_hints
class Point: x: int; y: int
print(sorted(get_type_hints(Point))) # → ['x', 'y']
from typing import get_type_hints
def h(a, b): ...
print(get_type_hints(h)) # → {}
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности