怎样获取当前模块中所有类的列表?

419 投票
13 回答
313863 浏览
提问于 2025-04-15 16:22

我看到很多人分享了从一个模块中提取所有类的例子,通常像这样:

# 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()

这可能是个很明显的事情,但我一直没能找到相关的信息。有人能帮帮我吗?

13 个回答

23

那这个呢

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

?

24

我不知道有没有“正确”的方法,但你的代码思路是对的:只需要在foo.py文件里加上import foo,然后运行inspect.getmembers(foo),这样就可以正常工作了。

525

试试这个:

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() 需要一个条件。

撰写回答