Python 3.14+annotationlibфункция
annotationlib.call_annotate_function()
низкоуровневые вызовы
Вызывает функцию __annotate__ в нужном формате. Нужна потому, что функция, созданная компилятором, сама понимает только VALUE.
Синтаксис
annotationlib.call_annotate_function(annotate, format, *, owner=None)
Прямой вызов f.__annotate__(Format.STRING) падает NotImplementedError: компилятор генерирует только ветку VALUE. call_annotate_function исполняет тот же код в подменённом окружении («фальшивые globals») и потому умеет FORWARDREF и STRING. Чаще всего нужна там, где объекта ещё нет, например в метаклассе; для готовой функции или класса проще get_annotations. В формате VALUE она ведёт себя как прямой вызов и так же падает NameError на неизвестном имени.
Примеры
# Python 3.14+
from annotationlib import call_annotate_function, Format
def h(a: int, b: Missing = 1): ...
print(call_annotate_function(h.__annotate__, Format.STRING)) # → {'a': 'int', 'b': 'Missing'}
print(call_annotate_function(h.__annotate__, Format.FORWARDREF)) # → {'a': <class 'int'>, 'b': ForwardRef('Missing')}
h.__annotate__(Format.STRING) # → NotImplementedError — напрямую только VALUE
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности