我对Union在Python中的用法有点困惑。
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类型的值)
发布于 2018-09-25 08:32:41
是的,Union[A,B]意味着值可以是,也可以是类型的A ,也可以是B类型的。
这确实是而不是的意思,即您可以将该值视为您选择的A或B。这正是交集类型的使用。
当您有一个Union[A,B]时,您必须检查该值是否为A,如果为A,则将其处理为A,或者它是否为B,并将其处理为B。优点是您知道它不会是其他类型的C,因此您有一个要检查的类型的定义列表。但你还是需要以某种方式检查。
https://stackoverflow.com/questions/52493462
复制相似问题