繁体   English   中英

我可以有一个数据类字段的简单列表吗

[英]Can I have a simple list of a dataclass field

我可以轻松获得dataclass中的字段列表吗?

@dataclass
class C:
    x: int
    y: int
    z: int
    t: int

预期结果:

[x,y,z]

您可以使用dataclassasdict方法。

如果你想要钥匙:

obj.asdict().keys()

或者如果您想要字段的值:

obj.asdict().values()

上述两种方法都返回一个View object ,您可以对其进行迭代,也可以使用list(...)将其转换为list

答案取决于您是否有权访问 class 的 object。

只需使用 class

如果您只能访问 class,那么您可以使用 dataclasses.fields dataclasses.fields(C)返回字段对象列表(每个对象都有一个.name属性):

[field.name for field in dataclasses.fields(C)]

从现有的 object

如果您有 class 的构造 object,那么您有两个额外的选择:

  1. dataclasses.fields上使用 dataclasses.fields:
[field.name for field in dataclasses.fields(obj)]
  1. 使用dataclasses.asdict(obj) (正如这个答案所指出的),它返回一个从字段名到字段值的字典。 听起来您只对字典的.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)))

Output:

['x', 'y', 'z', 't']
['x', 'y', 'z', 't']
dict_keys(['x', 'y', 'z', 't'])
['x', 'y', 'z', 't']
['x', 'y', 'z', 't']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM