«Нормальные» псевдонимы типа возможны, как это: < /p>
Код: Выделить всё
from typing import TypeAliasType
alias = TypeAliasType("alias", str)
foo: alias = "bar"
< /code>
Но теперь я хочу создать псевдоним рекурсивного типа, как этот: < /p>
from collections.abc import Sequence
type recursive = int | Sequence[recursive]
< /code>
Это включает в себя прямую ссылку, которую я нашел невозможным для эмуляции во время выполнения. Существует ForwardRef
Код: Выделить всё
from typing import ForwardRef, TypeAliasType
from collections.abc import Sequence
# This is what I want to emulate at runtime
type recursive = int | Sequence[recursive]
print(recursive.__value__) # int | collections.abc.Sequence[recursive]
# This is my (failing) attempt to emulate it at runtime
dynamic_list_of_types = float | int
ref = ForwardRef("recursive")
recursive = TypeAliasType("recursive", dynamic_list_of_types | Sequence[ref])
print(recursive.__value__) # float | int | collections.abc.Sequence[ForwardRef('recursive')]
< /code>
Как я могу объявить такой псевдоним рекурсивного типа во время выполнения? Поскольку список разрешенных типов (Dynamic_list_of_types
Подробнее здесь: https://stackoverflow.com/questions/797 ... at-runtime