2013-03-24 50 views
0

我用这条线来获得在脚本中使用的所有类的脚本中定义:获取类的列表,

clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass) 

是否有(普通)的方式来过滤掉所有类,但那些是在脚本内创建的? (我不想要导入的类的名称。)

简单地循环遍历所有元素,并检查__main__是imho太丑了。

回答

1

您检查__module__属性的类:

clsmembers = [c for c in inspect.getmembers(sys.modules[__name__], inspect.isclass) if c[1].__module__ == __name__] 

演示:

>>> import inspect 
>>> import sys 
>>> class Foo(object): pass 
... 
>>> from json import * 
>>> inspect.getmembers(sys.modules[__name__], inspect.isclass) 
[('Foo', <class '__main__.Foo'>), ('JSONDecoder', <class 'json.decoder.JSONDecoder'>), ('JSONEncoder', <class 'json.encoder.JSONEncoder'>)] 
>>> [c for c in inspect.getmembers(sys.modules[__name__], inspect.isclass) if c[1].__module__ == __name__] 
[('Foo', <class '__main__.Foo'>)] 
+0

工作很好,谢谢:) – tamasgal 2013-03-24 12:33:45