我们可以在python的泛型类型提示中使用Union吗?

时间:2019-01-23 09:18:52

标签: python union typing mypy

我正在编写一个函数,该函数使用解析器列表(具有具体类型)来解析Union类型的对象并返回联合类型。但是我发现我无法使Union正确地使用List泛型。

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 :(得分:2)

那是因为您没有指定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