首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python-attrs动态“对象化”嵌套数据结构

使用python-attrs动态“对象化”嵌套数据结构
EN

Stack Overflow用户
提问于 2018-01-28 08:31:11
回答 3查看 655关注 0票数 1

对于任意字典(最终具有嵌套集合和基本类型),使其成为具有python-attrs的嵌套对象列表的最佳方法是什么?

一些约束:字典键始终是字符串(它们是有效的python标识符),并且它的值将只包含本机集合类型、字符串、整数和浮点数。并且任何全深度的嵌套字典都将始终具有相同的特征。在任何列表或元组中,所有项都将是相同类型或无类型。很可能我的字典将始终是有序映射,因此顺序应该保留在生成的顶级列表和每个嵌套映射中。

例如:

代码语言:javascript
复制
{'some_key': [
  {'some_value': 12, 'foo': 'abc', 'bar': [1, 4, 8], 'baz': None}
  {'some_value': 24, 'foo': 'xyz', 'bar': [12, 12], 'baz': 'this'}],
 'other_key' : [1,2,3,4]
}

最后,我想列出两个可以使用属性遍历的对象:

代码语言:javascript
复制
some_key[0].some_value, some_key[0].baz 
other_key[-1]

也就是说,结果将是将嵌套映射“对象化”。我如何使用attrs做到这一点?使用attr.make_class()调用的一些循环是可行的吗?

EN

回答 3

Stack Overflow用户

发布于 2018-02-07 14:43:05

因此,最终我想出了一个对象化的解决方案,这个解决方案略有不同(并且可以很容易地扩展):

这是在使用attr.make_class。在我的例子中,"pluggy“插件类(pluggy是所使用的插件库,来自py.test)正在向数据object贡献新的data attributes。然后,我调用make_class来构建我的数据类的一个新子类,将新的attr.ib属性添加到这个子类中。我本可以避免声明这些属性,并通过对所贡献属性的数据类型的递归自省来动态构建它们……但我选择了显式而不是隐式;)

在这个过程中,在类主体之外创建的attr.ib可能不会按照我期望的顺序附加到新的子类中,这是一个小问题,@hynek很快就解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2020-11-21 00:34:26

我不知道为什么要使用attrs,因为有专门的库:Box

代码语言:javascript
复制
from box import Box

a_dict = {'some_key': [
    {'some_value': 12, 'foo': 'abc', 'bar': [1, 4, 8], 'baz': None},
    {'some_value': 24, 'foo': 'xyz', 'bar': [12, 12], 'baz': 'this'}],
    'other_key': [1, 2, 3, 4]
}

box_dict = Box(a_dict)

assert box_dict.some_key[0].some_value == 12
assert box_dict.some_key[0].baz == None
assert box_dict.other_key[-1] == 4
票数 0
EN

Stack Overflow用户

发布于 2018-02-09 04:36:17

这可能有助于说明为什么要使用对象,而不是简单地使用字典。您的示例用法如下:

代码语言:javascript
复制
some_key[0].some_value, some_key[0].baz 
other_key[-1]

区别在于:

代码语言:javascript
复制
some_key[0]["some_value"], some_key[0]["baz"]
other_key[-1]

你在这里唯一想要得到的是点访问语法吗?

attrs旨在为您提供一种更简单地定义类的方法,而不是将非结构化数据包装到非预定义类型的对象中,因此这不像是attrs要解决的用例attrs

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48481996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档