Python Glossary English

Python 3.14+annotationlibфункция

annotationlib.get_annotations()

получение аннотаций

Главный способ прочитать аннотации функции, класса или модуля в Python 3.14+, с выбором формата и без падения на ссылках вперёд.

Синтаксис

annotationlib.get_annotations(obj, *, globals=None, locals=None, eval_str=False, format=Format.VALUE)

По умолчанию формат VALUE: ссылка вперёд на необъявленное имя даёт NameError, а не строку — для инструментов берите format=Format.FORWARDREF. Каждый вызов возвращает новый словарь, так что правка результата на объект не влияет. Аннотации базовых классов не включаются — в отличие от typing.get_type_hints, который собирает их по MRO. eval_str=True разрешён только с VALUE, а объект без аннотаций (например, число) даёт TypeError. inspect.get_annotations в 3.14 — эта же функция.

Примеры

# Python 3.14+
from annotationlib import get_annotations, Format
class Node:
    value: int
    next: Node | None  # имя самого класса — ссылка вперёд
print(get_annotations(Node, format=Format.STRING))  # → {'value': 'int', 'next': 'Node | None'}
print(get_annotations(Node)['next'])  # → __main__.Node | None — класс уже создан
# Python 3.14+
import typing
from annotationlib import get_annotations
class Base:
    x: int
class Child(Base):
    y: str
print(get_annotations(Child))  # → {'y': <class 'str'>}
print(typing.get_type_hints(Child))  # → {'x': <class 'int'>, 'y': <class 'str'>}
get_annotations(5)  # → TypeError: 5 does not have annotations

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности