2013-06-18 21 views
2

我目前正在編寫一個python腳本來顯示包中所有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,蘋果,香蕉

我可以使用舊約定的方式,我可以檢查每行「類」字符串是否存在和檢索班級名稱。但我想知道是否有更好的方法來檢索所有的類名?

回答

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'] 
8

事情是這樣的:

>>> 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))] 
+0

導入模塊時,不要放入'.py' ... –

+0

@ SanjayT.Sharma哎呀!錯字。 –

+1

我將使用類名'A'而不是'so' :) – enpenax

相關問題