从抽象语法树

时间:2017-11-14 15:46:30

标签: python abstract-syntax-tree

我有一个包含类定义的.py文件。我无法更改该文件。 我已经解析了该文件的内容并获得了一个抽象语法树(ast),更具体地说,我有一个ast.ClassDef()的实例。

如何从ast.ClassDef()

实例化该类

这是一个人为的演示,展示了我想要做的事情:

import ast
src = """
class MyClass():
  def __init__():
    self.a = 1
    self.b = 2
    self.thesum = self.a + self.b
"""
p = ast.parse(src)
class_ = [node for node in ast.walk(p) if isinstance(node, ast.ClassDef)][0]
class_  #I want to instantiate the class that is referenced by class_ 

谷歌搜索表明,compile()可能会有所帮助,但我无法让它工作,因为它似乎期望可执行代码而不是类定义。换句话说,这并没有做太多的事情:

exec(compile(class_.body, "fakemodule", 'exec'))

它会抛出错误:

  

TypeError:期望一个可读的缓冲区对象

那么,我该如何实例化那个类?

0 个答案:

没有答案