我目前正在编写一个python脚本来显示包中所有python文件的所有名称,以及文件包含的类的所有名称。
方案
#A.py
class apple:
.
.
class banana:
.
.
# Extracting_FilesName_className.py
f=open("c:/package/A.py','r')
className=[]
"Here i need to use some command to get all the class name within the file A.py and append it to className'
print file_name,className
输出A.py,苹果,香蕉
我可以使用旧的约定方式,我可以检查每一行是否存在“class”字符串并检索className。但我想知道是否有更好的方法来检索所有类名?
答案 0 :(得分:9)
这样的事情:
>>> from types import ClassType
>>> import A
>>> classes = [x for x in dir(A) if isinstance(getattr(A, x), ClassType)]
另一个替代方案@ user2033511建议:
>>> from inspect import isclass
>>> classes = [x for x in dir(A) if isclass(getattr(A, x))]
答案 1 :(得分:5)
还可以找到嵌套类并且不需要导入文件的替代方法:
source = """
class test:
class inner_class:
pass
pass
class test2:
pass
"""
import ast
p = ast.parse(source)
classes = [node.name for node in ast.walk(p) if isinstance(node, ast.ClassDef)]
# ['test', 'test2', 'inner_class']