我对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]
的变量可以像类型为A
或B
那样使用,而类型检查器不会抛出错误。这不对吗?
如果是这样,我如何实现模仿此功能的功能? (,即可以使用get_object
中的值,就像它是A
或B
类型一样)
感谢您的帮助,如果您需要任何澄清,请告诉我。
答案 0 :(得分:3)
是Union[A,B]
表示值可以是类型{{1}的 或类型为A
的。
不是并不意味着您可以将值视作您选择的B
或A
。恰好是交集类型的使用。
当您拥有B
时,必须检查值是否为Union[A,B]
,如果是,则像A
那样处理它,或者是否为A
,然后处理就像B
。好处是您知道它不会是其他类型B
,因此您具有要检查的已定义类型列表。但是您仍然需要以某种方式进行检查。