You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Type[Union[A,B,C]]与Union[Type[A],Type[B],Type[C]]是否等价?

问题解答

核心结论

Type[Union[A, B, C]] 和 Union[Type[A], Type[B], Type[C]] 在Python类型系统中完全等价,且都能满足你的需求:允许传入A/B/C类本身,拒绝它们的实例。

具体验证与逻辑

  • 针对你给出的代码示例,两种写法下:
    • foo(A)、foo(B)、foo(C)都会被类型检查器(如mypy、pyright)判定为合法;
    • foo(A())、foo(B())、foo(C())都会被判定为非法,完全符合你的预期。
  • 从类型逻辑上看:
    Type[X]代表的是能生成X类型实例的类。当X是Union[A,B,C]时,能生成该联合类型实例的类就是A、B、C本身,这和Union[Type[A],Type[B],Type[C]]所表达的类型集合完全一致。

写法选择

Type[Union[A, B, C]] 更简洁易读,尤其是当联合类型的成员数量较多时,这种写法的优势更明显,完全可以作为首选写法。

内容的提问来源于stack exchange,提问作者noamtm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:22:05