当Python中的类使用__slots__时,如何获取属性的名称?

时间:2013-01-31 17:12:56

标签: python inheritance reflection slots

当我在Python中定义一个新式的类时,我可以使用__dict__ - 属性来获取已定义的属性(名称和值),该属性包含事物的字典。

我想在我的类及其子类中使用插槽,因为我将创建数十万个实例并希望节省一些内存。但是,使用__slots__的类将没有__dict__ - 属性,因此我不能以这种方式反射访问它们的值。

还有另一种方法,更好的方法是保留为这种类定义的属性的顺序吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:5)

您应该使用dir() built-in function列出对象成员,而不是直接访问__dict____slots__

实例__dict__将仅列出直接在实例上设置的属性,而dir()将列出该类的类和基础上的属性(包括方法)。它还会列出任何定义为插槽的内容。

您可以使用inspect module来过滤dir()的输出;如果您对方法不感兴趣,例如inspect.ismethod()可以提供帮助。

相关问题