Python 3.7+typingпонятие
typing.ForwardRef
обобщения и параметры
Внутреннее представление строковой (отложенной) аннотации; хранит исходную строку в __forward_arg__.
Синтаксис
typing.ForwardRef('SomeType')
Руками его почти никогда не создают — ForwardRef появляется сам, когда строку (например 'Node' для ссылки на ещё не определённый класс) передают в обобщение typing: Optional['Node'] или List['Node']. Строковая аннотация функции при этом остаётся в __annotations__ обычной str, а list['Node'] тоже хранит строку. Разворачивает эти отложенные ссылки в настоящие типы уже typing.get_type_hints().
Примеры
# Python 3.9+
from typing import ForwardRef, Optional, get_type_hints
print(ForwardRef('int').__forward_arg__) # → int
print(type(Optional['Node'].__args__[0]) is ForwardRef) # → True
print(type(list['Node'].__args__[0]) is ForwardRef) # → False
from typing import ForwardRef, Optional, get_type_hints
def f(x: 'int') -> None: pass
print(get_type_hints(f)['x'] is int) # → True
print(isinstance(ForwardRef('int'), type)) # → False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности