这行代码在PyPy中失败:

expr.__repr__ = lambda self: ast.dump(self, annotate_fields=False)
TypeError: can't set attributes on type object 'expr'


即使它在普通的python中也很好用,即它为我的AST节点提供了合理的__repr__。有什么原因为什么它在PyPy中不起作用?是否有任何解决方法?我尝试猴子修补repr函数本身的尝试失败了。

最佳答案

不幸的是,没有简单的方法。在PyPy上,AST类的作用类似于listint的内置类型,因为您不能更改它们。如果要定义自定义代表,则最好的办法就是定义自己的函数。您可能会发现ast.NodeVisitor类很容易实现此类功能。

关于python - PyPy:不能补习ast类吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16310661/

10-13 08:50