怎样获取当前模块中所有类的列表?
我看到很多人分享了从一个模块中提取所有类的例子,通常像这样:
# 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()
需要一个条件。