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
相关产品推荐
相关产品推荐

