如何获取 Python 中当前模块中所有类的列表?

新手上路,请多包涵

我见过很多人从模块中提取所有类的例子,通常是这样的:

 # foo.py
class Foo:
    pass

# test.py
import inspect
import foo

for name, obj in inspect.getmembers(foo):
    if inspect.isclass(obj):
        print obj

惊人的。

但我无法找到如何从 当前 模块中获取所有类。

 # foo.py
import inspect

class Foo:
    pass

def print_classes():
    for name, obj in inspect.getmembers(???): # what do I do here?
        if inspect.isclass(obj):
            print obj

# test.py
import foo

foo.print_classes()

这可能是非常明显的事情,但我还没有找到任何东西。谁能帮我吗?

原文由 mcccclean 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 373
2 个回答

试试这个:

 import sys
current_module = sys.modules[__name__]

在您的上下文中:

 import sys, inspect
def print_classes():
    for name, obj in inspect.getmembers(sys.modules[__name__]):
        if inspect.isclass(obj):
            print(obj)

甚至更好:

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

因为 inspect.getmembers() 采用谓词。

原文由 Nadia Alramli 发布,翻译遵循 CC BY-SA 3.0 许可协议

关于什么

g = globals().copy()
for name, obj in g.iteritems():

原文由 Krab 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题