我一直在用python测试ast。我想通过在运行时转换AST来修改方法。在
我可以使用inspect.getsource()
获得预编译方法的源代码,并且
我可以使用AST访问者根据需要修改AST。在
这可能很幼稚,但我希望能够编译AST并执行类似以下操作:
myClass.method.__func__.__code__ = compile(newAST, '<string>', 'exec')
但是compile只接受带有ast.模块作为根。 有没有一种方法可以编译ast.FunctionDef,或从已编译(或为空)模块代码中检索函数代码对象?在
如果你能提供任何关于这类事情的信息,我们将不胜感激。我看到的AST示例只处理简单的表达式。在
我意识到我只需要在名称空间中执行模块,然后就可以访问正常的结构了。 所以模式是:
^{pr2}$但现在我有另一个问题: 如何将其插入到普通的python构建过程中,以便只进行一次修改,然后从.pyc文件加载?在
你不应该在自己的答案中提出一个新的问题,而应该为这个问题创建一个单独的问题。在
注意你的第一个和第二个问题也有点矛盾。首先你想在运行时做一些事情,然后你想把它们写到一个文件中,这样你就不必一遍又一遍地做了。请说明你的最终目标是让我们清楚地知道你想要什么。在
这听起来像是在修改文件的ast之后创建一个新的.py文件,正如Parse a .py file, read the AST, modify it, then write back the modified source code中所解释的那样
然后,您将通过编译新创建的py文件来获得pyc文件。在
相关问题 更多 >
编程相关推荐