У меня есть входной исходный код, подобный этому
def foo(my_input):
return my_input + 42
, и я хочу, чтобы он преобразовался вот так
def method_name(arg0):
return my_input + 42
Преобразователь узла ast для этой цели записан так.
class MyRenamer(ast.NodeTransformer):
def __init__(self):
self._arg_count = 0
def visit_FunctionDef(self, node):
node.name = "method_name"
return node
def visit_arg(self, node):
node.arg = "arg_{}".format(self._arg_count)
self._arg_count += 1
return node
но когда я вызываю вышеуказанный трансформатор вот так.
node = ast.parse(code)
renamer = MyRenamer()
node2 = renamer.visit(node)
print(astor.to_source(node2))
Я получаю
def method_name(my_input):
return my_input + 42
Здесь аргумент функции не был изменен .