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

如何从嵌套dataclass中提取所有非嵌套字段名?

递归提取嵌套dataclass的所有基础字段名

完全可以只传入类类型实现需求,核心思路是通过递归判断字段类型是否为dataclass,若是则深入提取其字段,否则直接收集字段名。

下面是具体实现代码:

from dataclasses import dataclass, fields, is_dataclass

@dataclass
class A:
    var_1: str
    var_2: int

@dataclass
class B:
    var_3: float
    var_4: A

def get_flattened_fields(cls):
    flattened = []
    for field in fields(cls):
        field_type = field.type
        if is_dataclass(field_type):
            # 递归提取嵌套dataclass的字段
            flattened.extend(get_flattened_fields(field_type))
        else:
            flattened.append(field.name)
    return flattened

# 测试调用,直接传入类B
print(get_flattened_fields(B))  # 输出: ['var_3', 'var_1', 'var_2']

关键说明

  • is_dataclass(field_type):判断当前字段的类型是否为dataclass类(支持直接传入类类型判断)
  • fields(cls):直接接收类类型即可获取该dataclass的所有字段元信息
  • 递归逻辑:遇到dataclass类型的字段,就递归调用函数提取其内部字段;非dataclass类型则直接收集字段名

这样既满足了传入类类型的要求,也实现了嵌套字段的递归提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:42:35