【发布时间】:2011-01-17 20:48:29
【问题描述】:
Python 带有方便的dir() 函数,它可以为您列出类的内容。例如,对于这个类:
class C:
i = 1
a = 'b'
dir(C) 会返回
['__doc__', '__module__', 'a', 'i']
这很好,但请注意 'a' 和 'i' 的顺序现在与定义它们的顺序有何不同。
如何按定义的顺序迭代 C 的属性(可能忽略内置的文档和模块属性)?对于上面的 C 类,将是 'i' 然后是 'a'。
附录: - 我正在编写一些序列化/日志记录代码,我想在其中按照定义的顺序对属性进行序列化,以便输出类似于创建类的代码。
【问题讨论】:
-
为什么定义它们的顺序很重要?在这种情况下,顺序无关紧要。如果你能得到这些信息,你会如何使用它?
-
你是在序列化类还是类的实例?在您的示例中,
a和i是类属性。如果你的意思是这些是实例属性,你应该在__init__中使用self.a = 'b'和self.i = 1定义它们。 -
这些是类级别的属性,不如实例变量有用。你为什么要保持类属性的顺序?保留实例变量的顺序不是更好吗?你为什么要尝试使用类级变量?
-
我正在构建一个生成的类定制代码,该代码被注入到类对象中。在类级别上枚举属性是一个自然的选择。如果切换到实例对象会让事情变得更容易,我会很乐意切换。
标签: python reflection