猿问

如何在运行之前搜索python脚本以使用类方法?

我希望能够在运行脚本本身之前扫描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)

这是一个过于简单的示例,但这里的目标是使用比正则表达式更多的内容来搜索模式,以便不会返回类似这样的项目。我已经看过和模块,但它们似乎没有我想要的功能。我意识到这可能是一个困难/不可能的问题,因为python是一种解释性语言,但似乎其他人以前一定遇到过这个问题。foo()b.foo(1)astsymtable


德玛西亚99
浏览 121回答 2
2回答

慕的地6264312

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

沧海一幻觉

这听起来像是一个XY问题,但唉。您可以使用 inspect 模块在运行时检查类和函数:import inspectclass Foo:    def bar(self, val):        return val + 1    def baz(self, number):        return numberfunctions = 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)
随时随地看视频慕课网APP

相关分类

Python
我要回答