4

我正在使用 python 的 ast 模块来显示类继承树。

我为 a 定义了一个visit_ClassDef(self, node)函数ast.NodeVisitor,并遍历node.bases.

但是,我无法将基类的名称作为字符串获取。到目前为止,我已经尝试过base.valueand base.name,但无济于事。

4

1 回答 1

9

可能正在寻找以下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您可以从属性中获取标识符的“名称”作为字符串。

于 2013-10-04T06:33:57.013 回答