Python typing.get_args and typing.Union



使用typing.Union时,我无法获得有关该参数的任何信息:

import typing
x = typing.Union[str,int]
print(typing.get_args(x))

输出:(<class 'str'>, <class 'int'>)

def f(y: typing.Union[str,int]):
print(typing.get_args(y))
f(1)

输出:()

xis类型的联合。y为联合类型(即intstr)。

尝试print(type(x))print(type(y))

在函数签名中,您仅仅注释了y应该是str类型或int类型。因此,当您将1传递给函数时,您将在int上调用get_args

代码中的x只是该类型联合对象的别名。

事实上,你可以这样做:

from typing import Union
x = Union[str, int]
def f(y: x):
...

这相当于:

from typing import Union
def f(y: Union[str, int]):
...

您可以使用typing.get_type_hints()来获取f的类型注释:

def f(y: typing.Union[str,int]):
print(typing.get_type_hints(f))
f(1)

最新更新