Python - 迭代所有类

Nea*_*ers 2 python google-app-engine loops

如何遍历内存中加载的所有类的列表?我正在考虑做备份,寻找从db.Model(Google App Engine)继承的所有类.

谢谢,Neal Walters

Ale*_*lli 9

在"普通"Python中,您可以通过标准库模块的gc.getobjects()功能访问所有对象gc; 它是那么很容易对他们的循环,检查哪一个是类(而不是实例或别的-我相信你的意思实例类,但你可以很轻松地让自己过,如果这真的是你想要什么类),等等

不幸的是,gcApp Engine中的模块没有实现getobjects- 这使得到达所有类非常困难.例如,通过调用创建的类:

def makeaclass():
  class sic(object): pass
  return sic
Run Code Online (Sandbox Code Playgroud)

并隐藏在某个地方的列表中,很难达到.

但幸运的是,既然你在问题的文本中说你只关心子类db.Model,那就更容易了gc:

for amodel in db.Model.__subclasses__():
   ...
Run Code Online (Sandbox Code Playgroud)

只需确保明确忽略您不关心的类,例如Expando;-).

请注意,这个DOES只提供了CLASSES,而不是实例 - 如果那些是您真正想要的,那么没有类似的简单快捷方式!