說a.py,b.py,c.py 如何獲取所有模塊名稱和它們的類名和最終所有相應類的方法名稱,在該目錄中如果目錄中包含多個.py文件,則從python的目錄中獲取所有模塊名稱,類名稱和方法名稱
1
A
回答
1
contaned要過濾的文件,你可以使用目錄(「」是指當前目錄):
from os import listdir,chdir
default_path = r'c:\dev\python'
modules = [ fl for fl in listdir(default_path) if fl.endswith('.py') ]
爲了獲得我知道的類和方法,您可以使用inspect,但不能在不導入模塊的情況下使用它:
例如
from inspect import getmembers, isfunction, ismethod, isclass
your_module = __import__(modules[0].split('.')[0])
class_funcs = {}
funcs = [ obj for obj in getmembers(your_module) if isfunction(obj[1]) ]
classes = [ obj for obj in getmembers(your_module) if isclass(obj[1]) ]
for cls in classes:
class_funcs[cls[0]] = [ obj for obj in getmembers(cls[1]) if ismethod(obj[1]) ]
print funcs
[('function1', <function your_module.function1>),
('function2', <function your_module.function2>)]
print class_funcs
{'ClassName': [('__init__', <unbound method ClassName.__init__>),
('Method_name', <unbound method ClassName.Method_name>)]}
這將爲您提供模塊中的所有函數,類,類方法。
如果你不想導入模塊,我不熟悉獲取方法的方法(除了讀取文件和使用正則表達式等)。
0
如果你不想導入模塊,你可以使用AST來檢查它們。
import ast
import _ast
def inspect_module(module_path):
with open(module_path) as mf:
tree = ast.parse(mf.read())
module_classes = [_ for _ in tree.body if isinstance(_, _ast.ClassDef)]
module_classes = [(c.name, [_.name for _ in c.body if isinstance(_, _ast.FunctionDef)]) for c in module_classes]
return module_classes
它返回一個包含類名稱的元組和列表的函數名稱列表的列表。不幸的是,它不適用於固定的功能。 它可以很容易地擴展爲給你所有的函數參數。
相關問題
- 1. 從文件名獲取目錄名稱
- 2. 如何從目錄名稱中提取父目錄的名稱?
- 3. 獲取目錄包含目錄的目錄名稱
- 4. CMake:如何獲取目錄中所有子目錄的名稱?
- 5. 文件夾名稱包含名稱c#目錄
- 6. 如何從Ant中的目錄名稱獲取文件名?
- 7. 我想獲取所有目錄名稱
- 8. 從python包中獲取模塊名稱
- 9. C#獲取目錄名稱
- 10. 如何在IsolatedStorage中更改目錄名稱和文件名稱
- 11. 在模塊的方法中獲取包含的模塊名稱
- 12. 獲取目錄中所有文件的名稱(Perl)
- 13. 模塊名稱和目錄名稱衝突?
- 14. 如何從SaveFileDialog.FileName獲取目錄名稱
- 15. 如何使用python獲取目錄中文件的名稱
- 16. 從.py文件中獲取軟件包根目錄和完整模塊名稱以便導入
- 17. PHP如何獲得文件的所有名稱目錄從URL
- 18. 如何獲取目錄中特定類型文件的名稱?
- 19. 通過目錄名稱重命名目錄中的文件
- 20. 獲取目錄中的文件和文件夾名稱vb.net
- 21. BCEL - 獲取類名稱,元素名稱和方法名稱
- 22. powershell獲取遠程目錄名稱和文件名放在目標文件名
- 23. 列出名稱中包含空格的所有目錄
- 24. 從FileInfo對象獲取目錄名稱
- 25. C#從DirectoryNotFoundException獲取目錄名稱
- 26. 從目錄名稱獲取版本
- 27. 如何在文件.gitignore中包含.svn目錄? (所有名稱的目錄中包含點)
- 28. 目錄名稱包含特殊字符
- 29. 獲取文件/目錄所有者的名稱
- 30. 從c#代碼目錄中獲取所有文件的名稱,大小和url
請參閱['inspect'](https://docs.python.org/2/library/inspect.html) –