我正在使用这一行来获取脚本中使用的所有类:
clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass)
是否有一种(通用)方法可以过滤掉除在脚本中创建的所有类之外的所有类?(我不想要导入的类的名称。)
简单地遍历所有元素并检查__main__
是太丑陋了。
您检查__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'>)]