Код, который у меня сейчас есть для этой функции, выглядит следующим образом:
Код: Выделить всё
from typing import get_origin, get_args, Literal, Union
def traverse_union(union_type):
origin = get_origin(union_type)
if origin in {Union, Literal}:
for argument in get_args(union_type):
yield from traverse_union(argument)
return
yield union_type
print(list(traverse_union(int | float | Literal["Hello, world!"])))
# [, , 'Hello, world!']
В идеале я хочу, чтобы функция принимала какой-то тип, например Union_type: UnionType | LiteralType и возвращает тип типа -> Iterable[type | ул | интервал | плавать | # и более литеральных типов], но ничего из того, что я делаю, кажется правильным или даже работающим в этом отношении.
Я думаю, что мое самое большое препятствие заключается в том, что LiteralType на самом деле не существует, а type[Literal] имеет неверный синтаксис (Expected type arguments for generic class "Literal"). Думаю, дальше я смогу разобраться сам.
Может ли кто-нибудь мне помочь?
Подробнее здесь: https://stackoverflow.com/questions/788 ... ng-literal