我可以轻松获取dataclass
中的字段列表吗?
@dataclass
class C:
x: int
y: int
z: int
t: int
预期结果:
[x,y,z]
答案 0 :(得分:4)
您可以使用dataclass
的{{3}}方法。
如果需要按键:
obj.asdict().keys()
或者如果您想要字段的值:
obj.asdict().values()
以上两种方法都返回一个View
对象,您可以对其进行迭代,也可以使用list
将其转换为list(...)
。
答案 1 :(得分:2)
答案取决于您是否有权访问该类的对象。
如果您只能访问该类,则可以使用 dataclasses.fields(C)
返回字段对象列表(每个对象都有一个 .name
属性):
[field.name for field in dataclasses.fields(C)]
如果你有一个类的构造对象,那么你有两个额外的选择:
dataclasses.fields
:[field.name for field in dataclasses.fields(obj)]
dataclasses.asdict(obj)
(如 this answer 所指出的)返回一个从字段名称到字段值的字典。听起来您只对字典的 .keys()
感兴趣:dataclasses.asdict(obj).keys() # gives a dict_keys object
list(dataclasses.asdict(obj).keys()) # gives a list
list(dataclasses.asdict(obj)) # same
以下是使用您的示例的所有选项:
from dataclasses import dataclass, fields, asdict
@dataclass
class C:
x: int
y: int
z: int
t: int
# from the class
print([field.name for field in fields(C)])
# using an object
obj = C(1, 2, 3, 4)
print([field.name for field in fields(obj)])
print(asdict(obj).keys())
print(list(asdict(obj).keys()))
print(list(asdict(obj)))
输出:
['x', 'y', 'z', 't']
['x', 'y', 'z', 't']
dict_keys(['x', 'y', 'z', 't'])
['x', 'y', 'z', 't']
['x', 'y', 'z', 't']