我需要获取Python包中所有类的列表。一开始我得到了所有文件名(它工作正常,从stackoverflow中获取了它):
from os import listdir, getcwd
from os.path import isfile, join
mypath = 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句