从未知 python 文件中提取所有 类 和函数

Extracting all classes and functions from an unknown python file

我正在使用 AST 库来提取文件的所有详细信息,

import ast
file = open("TestFile.py", "r")
f = file.read()
p = ast.parse(f)
classFunc = [node.name for node in ast.walk(p) if isinstance(node, ast.ClassDef) or isinstance(node, ast.FunctionDef)]
print classFunc

这给了我一个输出,

['adf', 'A', 'message', 'dghe', '__init__', 'mess', 'B', 'teqwtdg']

这里,'adf'和'A'是主要的class,'message'和'dghe'是'adf'下的函数,' init'和'mess'是A下的函数,'B'是'A'下的一个class,'teqwtdg'是一个'B'.

下的函​​数

所以,现在我的任务是编写一个 python 文件,我在其中创建 class 实例并调用这些函数(这些函数来自未知文件)。我想安排此列表,以便我可以轻松地知道哪些是主要 classes,哪些是子 classes 以及哪个函数属于哪个 class。我该怎么做?

以下代码段将遍历文件并在层次结构中创建一个对象。

import ast
import pprint


def create_py_object(node_to_traverse, current_object):
    for node in node_to_traverse.body:
        if isinstance(node, ast.ClassDef):
            current_object.append({node.name: []})
            create_py_object(node, current_object[-1:][0][node.name])
        if isinstance(node, ast.FunctionDef):
            current_object.append({node.name: 'func'})


file = open("TestFile.py", "r")
f = file.read()
node_to_traverse = ast.parse(f)
py_file_structure = []

create_py_object(node_to_traverse, py_file_structure)
pprint.pprint(py_file_structure)

输出:

[{'adf': [{'message': 'func'}, {'dghe': 'func'}]},
 {'A': [{'__init__': 'func'}, {'mess': 'func'}, {'B': [{'teqwtdg': 'func'}]}]}]