4

クラス継承ツリーを表示するためにpythonのastモジュールを使用しています。

visit_ClassDef(self, node)の関数を定義しast.NodeVisitor、 を反復処理しnode.basesます。

ただし、基本クラスの名前を文字列として取得できませんでした。これまでのところ、私は試してみましbase.valuebase.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 に答える