我正在使用 python 的 ast 模块来显示类继承树。
我为 a 定义了一个visit_ClassDef(self, node)
函数ast.NodeVisitor
,并遍历node.bases
.
但是,我无法将基类的名称作为字符串获取。到目前为止,我已经尝试过base.value
and base.name
,但无济于事。
我正在使用 python 的 ast 模块来显示类继承树。
我为 a 定义了一个visit_ClassDef(self, node)
函数ast.NodeVisitor
,并遍历node.bases
.
但是,我无法将基类的名称作为字符串获取。到目前为止,我已经尝试过base.value
and base.name
,但无济于事。
您可能正在寻找以下id
属性:
>>> import ast
>>> class Visit(ast.NodeVisitor):
... def visit_ClassDef(self, node):
... print [n.id for n in node.bases]
...
>>> text = open('test.py').read()
>>> tree = ast.parse(text)
>>> Visit().visit(tree)
['Foo', 'Baz']
这是test.py
:
class Bar(Foo,Baz):
pass
这个文档很难理解,但你可以看到这bases
是一个expr
对象列表。现在它真的可以是任何表达。你可以在那里调用函数:
class Bar(FooFactory(),BazFactory()): pass
那是完全有效的python。但是,典型的情况是您只有标识符(类名),它们只不过是Name
表达式。id
您可以从属性中获取标识符的“名称”作为字符串。