Python Glossary English

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Сообщить о неточности