在Python对象上递归调用__dict__?

6 投票
2 回答
3252 浏览
提问于 2025-04-16 08:45

有没有一种简单的方法可以让一个 Python 对象的所有属性都能被 dict 调用?具体来说,当我对我的对象使用 dict 时,得到的结果是:

{'edges': [<dawg.Edge instance at 0x107aa0200>,
           <dawg.Edge instance at 0x10a581a70>,
           <dawg.Edge instance at 0x10656a680>]}

但我希望这个输出能是实例的 dict(),而不是实例的描述。

补充说明:我想要把这个对象转换成 JSON 格式,所以我需要 type(obj['edges'][0]) 是一个字典。

2 个回答

0

你可以给你的对象添加一个方法,叫做 expanddicts,这个方法的作用是通过对每个相关的东西调用 x.__dict__ 来构建一个字典。这样做似乎比直接去搞内置的字典类型和 __dict__ 属性要好。

2

我觉得用repr的方法会更简洁,不过你也可以在获取你上面提到的字典(我称它为d1)后,加上这一行来实现你想要的效果。

d2 = {'edges' : map(lambda x: x.getDict(), d1['edges'])}

或者可以用列表推导式来代替map。

d2 = {'edges' : [i.getDict() for i in d1['edges']]}

如果你能再详细描述一下你想要的内容,我可以尝试实现getDict,或者在那个lambda里写点别的,但我不太确定你想要的是什么。是所有边缘字段的字典吗?

撰写回答