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

Python中如何检查字段类型是否为Union并获取其内部类型

检查Dataclass字段的Union类型成员

你可以借助typing模块的get_args和get_origin工具函数来处理Union类型(包括Python 3.10+支持的|语法糖),具体实现如下:

代码示例

import dataclasses
from typing import get_args, get_origin, Union

@dataclasses.dataclass
class MyClass:
    attr1: int | None
    attr2: str | None

for field in dataclasses.fields(MyClass):
    field_type = field.type
    # 判断当前字段类型是否为Union(含|语法的情况)
    if get_origin(field_type) is Union:
        # 获取Union内部的所有类型成员,返回元组
        inner_types = get_args(field_type)
        print(f"字段{field.name}的Union类型成员:{inner_types}")
        # 检查是否包含str类型
        if str in inner_types:
            print(f"字段{field.name}包含str类型")
    else:
        # 处理非Union类型的情况,直接判断类型是否匹配
        if field_type is str:
            print(f"字段{field.name}是str类型")

关键函数说明

  • get_origin(field_type):返回类型的原始构造器,比如int | None的origin是Union,普通str类型的origin是None
  • get_args(field_type):返回类型的参数元组,Union类型下就是其包裹的所有子类型,比如str | None会返回(str, type(None))

补充说明

注意None在类型注解中对应的实际类型是type(None),如果需要检查是否包含可选类型,可以用type(None) in inner_types。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:35:44