クラス継承ツリーを表示するために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ます。