提问人:Dan Jackson 提问时间:10/31/2023 更新时间:10/31/2023 访问量:46
从嵌套数据类中提取所有字段名称
Extract all field names from nested dataclasses
问:
我有一个数据类,其中包含另一个数据类:
@dataclass
class A:
var_1: str
var_2: int
@dataclass
class B:
var_3: float
var_4: A
我想为不是数据类的属性创建一个包含所有字段名称的列表,如果该属性是一个数据类,则列出该类的属性,因此在这种情况下,输出将是我知道可以使用它来获取简单数据类的字段,但我无法弄清楚如何递归地为嵌套数据类执行此操作。理想情况下,我希望能够通过传递类类型 B(以相同的方式将类型传递给 ),而不是 B 的实例来做到这一点。可以这样做吗?['var_3', 'var_1', 'var_2']
dataclasses.fields
dataclasses.fields
谢谢!
答:
3赞
Barmar
10/31/2023
#1
用于遍历所有字段,列出其名称。dataclasses.fields()
用于判断字段是否为嵌套数据类。如果是这样,请递归到其中,而不是将其名称添加到列表中。dataclasses.is_dataclass()
from dataclasses import fields, is_dataclass
def all_fields(c: type) -> list[str]:
field_list = []
for f in fields(c):
if is_dataclass(f.type):
field_list.extend(all_fields(f.type))
else:
field_list.append(f.name)
return field_list
评论
A
B