如何按照定义的顺序遍历类的属性?[重复]
问题内容:
这个问题已经在这里有了答案 :
如何以与声明相同的顺序读取类属性? (7个答案)
2年前关闭。
Python附带了方便的dir()
函数,该函数将为您列出类的内容。例如,对于此类:
class C:
i = 1
a = 'b'
dir(C)
会回来
['__doc__', '__module__', 'a', 'i']
很好,但是请注意'a'
和的顺序'i'
现在与定义它们的顺序不同。
如何按照定义的顺序遍历C的属性(可能忽略内置的doc和module属性)?对于上述C类,'i'
则为'a'
。
附录:-我正在处理一些序列化/日志记录代码,在这些代码中,我想按照定义属性的顺序序列化属性,以使输出类似于创建类的代码。
问题答案:
我认为这在Python
2.x中是不可能的。将类成员提供给该__new__
方法时,它们将作为字典提供,因此该顺序已经丢失。因此,即使是元类也无法在这里为您提供帮助(除非我错过了其他功能)。
在Python 3中,您可以使用新的__prepare__
特殊方法创建有序的dict(甚至在PEP
3115中
作为示例给出)。