如何从嵌套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
相关产品推荐
相关产品推荐

