我有一个包含类定义的.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:期望一个可读的缓冲区对象
那么,我该如何实例化那个类?