如何按照定义的顺序遍历类的属性?[重复]


问题内容

这个问题已经在这里有了答案

如何以与声明相同的顺序读取类属性? (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中
作为示例给出)。