我需要获取
Python包中所有类的列表.
起初我得到所有文件名(它工作正常,从stackoverflow获取):
from os import listdir, getcwd
from os.path import isfile, join
mypath = os.getcwd()
onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
然后我检查所有文件,它不能正常工作:
for x in onlyfiles:
for name, obj in inspect.getmembers(x):
if inspect.isclass(obj):
print obj
输出是:
<type 'str'>
....
<type 'str'>
但是,以下代码正常工作:
for name, obj in inspect.getmembers(example.py):
if inspect.isclass(obj):
print obj
你能帮我搞清楚错误是什么吗?
最佳答案 inspect.getmembers()处理对象,并传入字符串. Python不知道这些字符串包含文件名,或者将这些文件名视为要导入的模块.
您必须导入inspect.getmembers()的文件才能工作.因为您正在使用当前目录中的文件,所以您应该只能将它们全部导入:
import importlib
for x in onlyfiles:
module = importlib.import_module(x)
for name, obj in inspect.getmembers(module):
if inspect.isclass(obj):
print obj
请注意,inspect.getmembers()
接受第二个参数,该谓词允许您过滤方法返回的内容.您可以在这里使用inspect.isclass()作为谓词,而不是手动过滤:
for x in onlyfiles:
module = importlib.import_module(x)
for name, obj in inspect.getmembers(module, inspect.isclass):
print obj