在astroid中定义一个Call节点

时间:2019-09-23 12:42:25

标签: python abstract-syntax-tree astroid

我想定义一个这样的节点:

from astroid import parse
print_node = parse("print()")

print(print_node.body[0].value)

# Call(func=<Name.print l.1 at 0x1abe5f02978>,
#      args=[],
#      keywords=None)

我发现定义它的唯一方法是:

new_print_node = astroid.Call()
new_print_node.postinit(func=print_node.body[0].value.func)

是否可以通过实例化documentation所建议的NodeNG来直接获取函数?我尚未找到如何从NodeNG来定义print函数

1 个答案:

答案 0 :(得分:0)

Node只是名称为print的{​​{3}}。

例如astroid.Name(name="print")

print_node = astroid.Call()
print_node.postinit(
    func=astroid.Name(name="print")
)

哪个给:

Call(func=<Name.print l.None at 0x249099ac710>,
     args=[],
     keywords=None)