我正在使用python的ast模块来显示类继承树。
我为visit_ClassDef(self, node)
定义了ast.NodeVisitor
函数,并遍历node.bases
。
但是,我无法将基类的名称作为字符串。
到目前为止,我已尝试base.value
和base.name
,但无济于事。
答案 0 :(得分:8)
您可能正在寻找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
属性中将标识符的“名称”作为字符串获取。