Извлечение всех классов и функций из неизвестного файла python - PullRequest
0 голосов
/ 13 февраля 2020

Я использую библиотеку 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 - это основные классы, «message» и «dghe» - это функции из «adf», « init » и «mess» - это функции из «A», «B» - это класс из «A». 'и' teqwtdg '- это функция в категории' B '.

Итак, теперь моя задача - написать файл python, в котором я создаю экземпляры классов и вызываю эти функции (они из неизвестного файла) , Я хочу расположить этот список так, чтобы я мог легко узнать, какие основные классы являются подклассами и какая функция относится к какому классу. Как я могу это сделать?

1 Ответ

0 голосов
/ 13 февраля 2020

Следующий фрагмент кода пройдет через файл и создаст объект в иерархии.

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'}]}]}]
...