gpt4 book ai didi

Python AST 处理

转载 作者:太空狗 更新时间:2023-10-29 21:20:29 26 4
gpt4 key购买 nike

我有一个 Python AST [由 ast.parse() 返回]。

我知道这是类方法的 AST。

如何找到对同一类的其他方法的所有调用?

基本上,我想收集这样的东西:

['foo', 'bar']

对于像这样的代码片段:

def baz(self): # this is a class method
'''baz docstring'''
self.foo() + self.bar()

我需要一个函数,它将接受 AST 并将返回在同一类的方法内部调用的类的其他方法列表 [方法名称作为字符串]。

最佳答案

一般的做法是子类ast.NodeVisitor :

>>> class VisitCalls(ast.NodeVisitor):
... def visit_Call(self, what):
... if what.func.value.id == 'self':
... print what.func.attr
...
>>> f='''def x(self):
... return self.bar() + self.baz()
... '''
>>> xx = ast.parse(f)
>>> VisitCalls().visit(xx)
bar
baz

但是,这只会捕获对 self.something 的“立即”调用。在一般情况下,你可以有例如somelist.append(self.blah) 之后在代码 somelist[i + j]() 中:判断后者是否调用 的问题code>self.blah 或与当前实例的方法无关的其他一些可调用对象是图灵完备的(CS 术语“在一般情况下完全不可溶”,就像数学家可能会说“NP -硬";-).

但如果您只需要解决简单的“立即调用”案例,您就可以开始了;-)。

关于Python AST 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2379355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com