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是Noneget_args(field_type):返回类型的参数元组,Union类型下就是其包裹的所有子类型,比如str | None会返回(str, type(None))
补充说明
注意None在类型注解中对应的实际类型是type(None),如果需要检查是否包含可选类型,可以用type(None) in inner_types。
内容的提问来源于stack exchange,提问作者Alberto B
相关产品推荐
相关产品推荐

