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