Python 定义仅在ast.While对象中使用的访问方法

Python 定义仅在ast.While对象中使用的访问方法,python,python-3.x,abstract-syntax-tree,Python,Python 3.x,Abstract Syntax Tree,我试着写一封信 (一个棋盘格)我要检查的对象是ast。而, 尤其是身体。我对所做的操作感兴趣 关于测试比较的变量(我只使用ast.While 测试表达式是一个ast.Compare对象)。那么 感兴趣的案例是ast.augsign或ast.Assign或taking 如果比较中的对象 是int 我定义了ast.Name,ast.Attribute。。。提取 变量名。但问题是我想要这种行为 仅在ast.While主体中,因为我的类中有属性 (TestWhile(ast.NodeVisitor))存

我试着写一封信 (一个棋盘格)我要检查的对象是
ast。而
,
尤其是身体。我对所做的操作感兴趣
关于测试比较的变量(我只使用
ast.While
测试表达式是一个
ast.Compare
对象)。那么 感兴趣的案例是
ast.augsign
ast.Assign
或taking 如果比较中的对象 是
int

我定义了
ast.Name
ast.Attribute
。。。提取 变量名。但问题是我想要这种行为 仅在
ast.While
主体中,因为我的类中有属性 (
TestWhile(ast.NodeVisitor)
)存储信息,因此我不需要 希望在
ast.While
正文外修改它们。 例如,我应该在定义中定义
visit_Name()
在使用
方法的同时访问\u


谢谢。

我将通过创建两个访问者类来实现这一点。一个负责识别
ast.While
节点,另一个负责访问While节点内的节点

class WhileVisitor(ast.NodeVisitor):

    def visit_While(self, node):
        body_visitor = BodyVisitor()
        body_visitor.visit(node)
        return


class BodyVisitor(ast.NodeVisitor):

    def visit_Assign(self, node):
        # do stuff

    # define methods to visit any other nodes of interest.

通过分离识别while节点和处理其主体的责任,您可以确保只处理while节点中的节点。

我考虑过这一点,并做了类似的事情。使用astroid
可以做类似的事情吗?我在
astroid
中没有发现任何类只访问树,就像
ast一样。NodeVisitor
会访问树。