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

AME*_*AME 0 python reflection inheritance slots

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

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

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

任何帮助将不胜感激!

Mar*_*ers 5

您应该使用dir()内置的功能,列出对象,而不是访问的任何成员__dict____slots__直接.

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

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