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
会访问树。