我希望能够在运行脚本本身之前扫描python脚本以使用类方法。例如,给定以下脚本,获取类“A”的“foo”方法的所有用法以及传递给该方法的参数class A(): def foo(self, val): return val + 1class B(): def foo(self, val): return val - 1a = A()b = B()a_val = a.foo(1)b_val = b.foo(1)这是一个过于简单的示例,但这里的目标是使用比正则表达式更多的内容来搜索模式,以便不会返回类似这样的项目。我已经看过和模块,但它们似乎没有我想要的功能。我意识到这可能是一个困难/不可能的问题,因为python是一种解释性语言,但似乎其他人以前一定遇到过这个问题。foo()b.foo(1)astsymtable
2 回答

慕的地6264312
TA贡献1817条经验 获得超6个赞
这不能通过静态代码分析来完成,因为方法的所有者是在运行时确定的。例如,我可以添加到您的示例中:
b = a b.foo(0)
这里实际上是对类的方法的调用。静态代码分析无法知道这一点,因为这取决于运行时。b.foo(0)
A
foo
这意味着你所要求的减少到停止问题。没有办法用一个有保证的(甚至在概率上比偶然的更准确)的正确答案来做你所要求的事情。

沧海一幻觉
TA贡献1824条经验 获得超5个赞
这听起来像是一个XY问题,但唉。您可以使用 inspect
模块在运行时检查类和函数:
import inspect
class Foo:
def bar(self, val):
return val + 1
def baz(self, number):
return number
functions = inspect.getmembers(Foo(), predicate=inspect.ismethod)
for name, function in functions:
sig = inspect.signature(function)
print(f'Function "{name}" has a params {sig}')
输出:
Function "bar" has a params (val)
Function "baz" has a params (number)
添加回答
举报
0/150
提交
取消