gpt4 book ai didi

python - 访问类型为 Union 的变量的属性会引发错误

转载 作者:行者123 更新时间:2023-12-02 03:28:36 24 4
gpt4 key购买 nike

我对 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

上面的代码片段返回错误:“Union[A, B]”的项目“A”没有属性“bar”

文档状态

The interaction between Intersection and Union is complex but should be no surprise if you understand the interaction between intersections and unions of regular sets

这让我相信 Union[A, B] 类型的变量可以像 A 类型一样使用B,没有类型检查器抛出错误。这是不正确的吗?

如果是这样,我怎样才能实现模仿它的功能? (即来自 get_object 的值可以用作 AB 类型)

最佳答案

Union[A,B] 表示值可以是 either 类型 A 类型B..

意味着您可以根据自己的选择将值视为AB。这正是交叉类型的使用。

当你有一个 Union[A,B] 时,你必须检查值是否为 A,如果是,则像 A 一样处理它>,或者如果它是 B,则像 B 一样处理它。优点是您知道它不会是其他类型 C,因此您有一个定义的类型列表来检查。但是您仍然需要以某种方式进行检查。

关于python - 访问类型为 Union 的变量的属性会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52493462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com