python - 如何使用 ast(抽象语法树)模块获取节点的完整“路径”?
问题描述
我正在修改 Python 的ast
(抽象语法树)模块。
使用ast.NodeVisitor
,可以遍历源树并显示信息,例如每个节点的名称,如下所示:
class MyAST(ast.NodeVisitor):
def visit_ClassDef(self, node):
print(node.col_offset * " " +node.name)
self.generic_visit(node)
def visit_FunctionDef(self, node):
print(node.col_offset * " " + node.name)
self.generic_visit(node)
然后它可以用于任何这样的代码:
tree = ast.parse(open("/path/to/file.py").read())
MyAST().visit(tree)
这将输出类似的内容(例如,在requests包中的models.py上使用):
RequestEncodingMixin
path_url
_encode_params
_encode_files
RequestHooksMixin
register_hook
deregister_hook
Request
__init__
__repr__
prepare
(...)
我想知道,对于给定的节点,它的完整“路径”。在上面的输出示例中,当我在FunctionDef
节点中时deregister_hook
,我想知道它的父节点是ClassDef
RequestHooksMixin
这样的,以便我可以输出类似RequestHooksMixin.deregister_hook
.
解决方案
推荐阅读
- bash - 对于具有数十万块数据的文件,如何扫描每个块以检查它是否包含 X 行?
- c# - RequestDelegate 是一个端点吗?
- android - macOS Catalina 上的 AOSP 存储库同步失败
- php - php静态函数类保存以前的函数调用数据
- java - 无法使用 XPath 定位嵌套文本
- c++ - 当 Table1.COL = Table2.Col 时从 Table1 中删除行
- visual-studio-2019 - 当 Configuration 设置为 RELEASE 时,为什么 Visual Studio 2019 在构建期间会在 DEBUG 文件夹中查找文件?
- firebase - Firebase 规则限制写入不起作用
- css - 如何使 Ant Design 表响应式
- swift - 在 Combine 中按顺序链式网络调用