如何不实例化类,提取静态方法get_values的逻辑信息编写文档?
提取静态方法逻辑生成Markdown表格实现方案
实现思路
通过Python的抽象语法树(AST)做静态代码分析,无需调用目标方法,就能提取match-case分支里的val值和对应计算逻辑,再生成指定格式的Markdown表格写入ReadMe.md。
具体实现代码
import ast from typing import Dict def extract_calculation_logic(file_path: str) -> Dict[str, str]: # 读取目标Python文件内容 with open(file_path, 'r', encoding='utf-8') as f: code_content = f.read() # 解析代码生成AST语法树 ast_tree = ast.parse(code_content) logic_map = {} # 遍历AST找到目标静态方法 for node in ast.walk(ast_tree): if isinstance(node, ast.FunctionDef) and node.name == 'get_values': # 定位到match语句 for statement in node.body: if isinstance(statement, ast.Match): for case_branch in statement.cases: # 提取case对应的val值 val_str = case_branch.pattern.value # 提取return语句中的计算表达式 return_node = case_branch.body[0] if isinstance(return_node, ast.Return): # 将AST节点转回代码字符串 calc_expr = ast.unparse(return_node.value) # 去除换行和多余空格,转为单行格式 calc_expr = ''.join(calc_expr.split()) logic_map[val_str] = calc_expr return logic_map def write_to_readme(logic_map: Dict[str, str], output_file: str = 'ReadMe.md'): # 构建Markdown表格内容 table_header = "| val | calculation |\n| --- | --- |\n" table_rows = [f"| {val} | {expr} |\n" for val, expr in logic_map.items()] full_table = table_header + ''.join(table_rows) # 将表格写入ReadMe.md(覆盖原有内容,如需追加可修改模式为'a') with open(output_file, 'w', encoding='utf-8') as f: f.write(full_table) if __name__ == '__main__': # 替换为你的目标Python文件路径 calc_logic = extract_calculation_logic('your_class_file.py') write_to_readme(calc_logic)
关键说明
- 静态分析安全可靠:用AST解析代码,不会执行任何业务逻辑,避免调用方法带来的副作用。
- 兼容性处理:
ast.unparse仅在Python 3.9及以上版本可用,若用更低版本,可安装astor库,用astor.to_source(return_node.value)替代ast.unparse。 - 结构适配:代码默认适配你提供的
match-case结构,若目标方法代码结构有变化(如新增case分支、return语句嵌套等),需调整AST节点的遍历逻辑。
内容的提问来源于stack exchange,提问作者ohh
相关产品推荐
相关产品推荐

