我希望能够在运行脚本本身之前扫描python脚本中是否使用类方法。例如,给定以下脚本,获取对“ A”类的“ foo”方法的所有使用以及传递给该方法的参数
class A():
def foo(self, val):
return val + 1
class B():
def foo(self, val):
return val - 1
a = A()
b = B()
a_val = a.foo(1)
b_val = b.foo(1)
这是一个非常简单的示例,但是这里的目标是使用除正则表达式以外的其他内容来搜索foo()
模式,以便不返回诸如b.foo(1)
之类的项目。我看过ast
和symtable
模块,但是它们似乎没有我想要的功能。我意识到由于python是一种解释型语言,这可能是一个困难/不可能的问题,但似乎其他人以前曾经遇到过此问题]
这无法通过静态代码分析完成,因为方法的所有者是在运行时确定的。例如,我可以添加到您的示例中:
b = a
b.foo(0)
这里b.foo(0)
实际上是对类A
的foo
方法的调用。而且静态代码分析不知道这一点,因为这取决于运行时。
这意味着您要的内容减少了停顿问题。不能保证正确答案就可以满足您的要求。