クラス継承ツリーを表示するためにpythonのastモジュールを使用しています。
visit_ClassDef(self, node)
の関数を定義しast.NodeVisitor
、 を反復処理しnode.bases
ます。
ただし、基本クラスの名前を文字列として取得できませんでした。これまでのところ、私は試してみましbase.value
たbase.name
が、役に立ちませんでした。
クラス継承ツリーを表示するためにpythonのastモジュールを使用しています。
visit_ClassDef(self, node)
の関数を定義しast.NodeVisitor
、 を反復処理しnode.bases
ます。
ただし、基本クラスの名前を文字列として取得できませんでした。これまでのところ、私は試してみましbase.value
た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
ます。