Можем ли мы использовать Union внутри generic typehinting в python? - PullRequest
0 голосов
/ 23 января 2019

Я пишу функцию, которая анализирует объект типа Union со списком анализаторов (с конкретными типами) и возвращает объединенный тип.Однако я обнаружил, что не могу заставить Union работать корректно с универсальным списком.

from typing import List,Union,TypeVar
T=TypeVar("T")
T1=TypeVar("T1")

def union_list(l: List[Union[T,T1]] )-> Union[T,T1]:
    return l[0]

test=[0,"_"]
result=union_list(test)
reveal_type(result)

Я ожидаю получить Union [int, str] в качестве типа для результата, но вместо этого получил объект.Есть ли способ объединения перечисленных типов без их явного указания?

1 Ответ

0 голосов
/ 23 января 2019

Это потому, что вы не указали тип test.Будет работать следующее:

from typing import List, TypeVar, Union

T = TypeVar("T")
T1 = TypeVar("T1")


def union_list(l: List[Union[T, T1]])-> Union[T, T1]:
    return l[0]


# Here, specify the type of test
test = [0, "_"]  # type: List[Union[int, str]]
result = union_list(test)
reveal_type(result)
# Happily answers: Revealed type is 'Union[builtins.int, builtins.str]'

Если вы не укажете тип test, mypy выведет, что тип test List[object].Если бы вы указали:

test = [0, 1]

(даже без объявления типа), mypy выведет, что тип test равен List[int], а выявленный тип result будет int.

...