我们可以在 python 的泛型类型提示中使用 Union 吗?
Can we use Union inside generics typehinting in python?
我正在编写一个函数,它使用解析器列表(具有具体类型)和 return 联合类型来解析联合类型对象。但是我发现我无法让 Union 与 List generic 一起正常工作。
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] 作为结果的类型,但得到的却是对象。有没有办法在不明确说明的情况下联合列出的类型?
那是因为你没有指定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
。
我正在编写一个函数,它使用解析器列表(具有具体类型)和 return 联合类型来解析联合类型对象。但是我发现我无法让 Union 与 List generic 一起正常工作。
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] 作为结果的类型,但得到的却是对象。有没有办法在不明确说明的情况下联合列出的类型?
那是因为你没有指定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
。