在Python3中正确使用Union []

时间:2018-09-25 08:09:23

标签: python-3.x static-typing

我对python静态类型中Union的用法有些困惑。

class A():
    foo: int = 10

class B():
    bar: str = 'hello'

def get_object() -> Union[A, B]:
    return B()

var = get_object()
var.bar

以上代码段返回error: Item "A" of "Union[A, B]" has no attribute "bar"

文档状态

  

交集和并集之间的相互作用很复杂,但是如果您了解常规集的交集和并集之间的相互作用,也就不足为奇了

这使我相信类型为Union[A, B]的变量可以像类型为AB那样使用,而类型检查器不会抛出错误。这不对吗?

如果是这样,我如何实现模仿此功能的功能? (,即可以使用get_object中的值,就像它是AB 类型一样)

感谢您的帮助,如果您需要任何澄清,请告诉我。

1 个答案:

答案 0 :(得分:3)

Union[A,B]表示值可以是类型{{1}的 或类型为A的。

不是并不意味着您可以将值视作您选择的BA。恰好是交集类型的使用。

当您拥有B时,必须检查值是否为Union[A,B],如果是,则像A那样处理它,或者是否为A,然后处理就像B。好处是您知道它不会是其他类型B,因此您具有要检查的已定义类型列表。但是您仍然需要以某种方式进行检查。