Python 3.10+inspectфункция
inspect.get_annotations()
сигнатуры
Безопасно возвращает словарь аннотаций функции, класса или модуля; умеет вычислить строковые аннотации (eval_str=True).
Синтаксис
inspect.get_annotations(obj, *, globals=None, locals=None, eval_str=False)
Всегда отдаёт новый dict и пустой {} там, где аннотаций нет, тогда как __annotations__ у разных объектов ведёт себя по-разному. Строковые аннотации (в кавычках или под from __future__ import annotations) по умолчанию остаются строками — eval_str=True вычисляет их и может упасть NameError, если имя не определено. С 3.14 это то же, что annotationlib.get_annotations, и аннотации вычисляются лениво. Отличие от typing.get_type_hints: та собирает аннотации всех предков класса, эта — только самого объекта.
Примеры
import inspect
def f(a: 'int', b: float = 1.0) -> 'str': pass
print(inspect.get_annotations(f))
# → {'a': 'int', 'b': <class 'float'>, 'return': 'str'}
print(inspect.get_annotations(f, eval_str=True))
# → {'a': <class 'int'>, 'b': <class 'float'>, 'return': <class 'str'>}
import inspect, typing
class A:
x: int
class B(A):
y: str
print(inspect.get_annotations(B)) # → {'y': <class 'str'>}
print(typing.get_type_hints(B)) # → {'x': <class 'int'>, 'y': <class 'str'>}
print(inspect.get_annotations(len)) # → {}
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности