【发布时间】:2010-12-20 06:02:06
【问题描述】:
我见过很多人从一个模块中提取所有类的例子,通常是这样的:
# foo.py
class Foo:
pass
# test.py
import inspect
import foo
for name, obj in inspect.getmembers(foo):
if inspect.isclass(obj):
print obj
太棒了。
但我不知道如何从 current 模块中获取所有类。
# 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()
这可能是非常明显的事情,但我无法找到任何东西。谁能帮帮我?
【问题讨论】:
-
有一个PEP 表示这样的功能,但被拒绝了。
-
阅读
"class"的源代码有什么问题?为什么那行不通? -
我猜这个问题是关于想要自动化某些任务,所以以编程方式完成它很重要。大概提问者认为通过眼睛阅读源代码手动执行此操作可能是重复的、容易出错或耗时的。
-
我根据这个问题为检查一个类而创建的一个简单的衬里是:
[name for name,obj in inspect.getmembers(foo) if inspect.isclass(obj)]
标签: python reflection inspect