1

コード分​​析を行うために使用_astしていますが、インポートされた関数の名前を取得する際に問題が発生しました。
コード ファイル ( code.py) が次のようになっているとします。

import somemod
def foo():
    somemod.bar()

でこのファイルの ast を取得すると、次のようなroot = compile(open('codefile.py').read(), 'codefile.py', 'exec', _ast.PyCF_ONLY_AST)行呼び出しを取得できます。somemod.bar

root.body[1].body[0]

これは_ast.Exprノードです。次に、このノードを調べて
取得できることを期待しています。somemod.barしかし、 を見るroot.body[1].body[0].value.func.value.idと が得られsomemodます。私が知る限り、私は取得する方法を見つけることができませbarsomemod.bar

私は何が欠けていますか?どうすれば にたどり着けbarますか?

4

1 に答える 1

1

それはvalue.func.attr:

>>> root = compile(open('codefile.py').read(), 'codefile.py', 'exec', _ast.PyCF_ONLY_AST)
>>> root.body[1].body[0].value.func
<_ast.Attribute object at 0x9703acc>
>>> f = root.body[1].body[0].value.func
>>> vars(f)
{'col_offset': 4, 'ctx': <_ast.Load object at 0xb6e2c6cc>, 'attr': 'bar', 'value': <_ast.Name object at 0x9703a8c>, 'lineno': 3}
>>> f.attr
'bar'
>>> f.value.id
'somemod'
于 2013-01-16T17:07:44.890 に答える