2

我正在尝试使用 ast 打开一个 .py 文件,并为文件中的每个类提供我想要的属性。

但是,我无法按预期行事。

我希望能够做到

import ast

tree = ast.parse(f)
for class in tree:
    for attr in class:
        print class+" "+attr.key+"="+attr.value

例如; 有点像带有 XML 的 ElementTree。或者也许我在 ast 背后有一个完全错误的想法,在这种情况下,是否有可能以另一种方式做到这一点(如果没有,我会写一些东西来做到这一点)。

4

1 回答 1

1

比这复杂一点。您必须了解 AST 的结构和所涉及的 AST 节点类型。另外,使用NodeVisitor类。尝试:

import ast

class MyVisitor(ast.NodeVisitor):
    def visit_ClassDef(self, node):
        body = node.body
        for statement in node.body:
            if isinstance(statement, ast.Assign):
                if len(statement.targets) == 1 and isinstance(statement.targets[0], ast.Name):
                    print 'class: %s, %s=%s' % (str(node.name), str(statement.targets[0].id), str(statement.value))

tree = ast.parse(open('path/to/your/file.py').read(), '')
MyVisitor().visit(tree)

有关更多详细信息,请参阅文档

于 2013-09-12T05:22:44.853 回答