如何按照定义的顺序迭代类的属性?

Boa*_*oaz 9 python reflection

Python附带了一个方便的dir()函数,可以为您列出类的内容.例如,对于这个类:

class C:
   i = 1
   a = 'b'
Run Code Online (Sandbox Code Playgroud)

dir(C) 会回来的

['__doc__', '__module__', 'a', 'i']
Run Code Online (Sandbox Code Playgroud)

这很好,但请注意现在的顺序'a''i'现在的顺序是不同的.

如何按照定义的顺序迭代C的属性(可能忽略内置的doc和模块属性)?对于上面的C级,在将'i'接着'a'.

附录: - 我正在编写一些序列化/日志记录代码,我想按照它们定义的顺序序列化属性,以便输出类似于创建类的代码.

nik*_*kow 8

我不认为这在Python 2.x中是可行的.当类成员被提供给__new__方法时,它们被作为字典给出,因此在那时订单已经丢失.因此,即使是元类也无法帮助你(除非我错过了其他功能).

在Python 3中,您可以使用新的__prepare__特殊方法来创建有序的dict(这甚至在PEP 3115中作为示例给出).