类方法不会返回任何内容

2024-09-21 00:21:08 发布

您现在位置:Python中文网/ 问答频道 /正文

当我编写脚本时,我有一个公共的个人函数库,我通过懒洋洋地导入整个函数库来使用它。所以我想清理它,这样就不用导入数千行代码,我可以让脚本自动选择特定脚本所需的函数,并将它们复制到文件中以供发布。我使用astinspect的组合实现了这一点,但现在我想复制在模块内部定义全局变量的确切代码行

例如,如果我在脚本中使用快捷方式eprint,它应该删除行:eprint = Eprinter(verbose=1).eprint,这将创建类方法的快捷方式

我正在尝试采用我在这里找到的代码:https://stackoverflow.com/a/13230346/11343425

class GetAssignments(ast.NodeVisitor):
    def visit_Name(self, node):
        if isinstance(node.ctx, ast.Store):
            if node.id == 'eprint':
                print(node.id, node.lineno)
                return node.lineno

code = inspect.getsource(printing)
a = GetAssignments()
b = a.visit(ast.parse(code))
print('b =', b)

这将很好地打印node.lineno,但它不会返回None,我也不知道为什么


Tags: 代码脚本idnodeifcodevisitast
1条回答
网友
1楼 · 发布于 2024-09-21 00:21:08

ast.NodeVisitor是子类化的,这意味着visit_Name不能返回任何内容。但是,自定义函数可以是这样的中介:

class GetAssignments(ast.NodeVisitor):
    def visit_Name(self, node):
        if isinstance(node.ctx, ast.Store):
            if node.id == self.expr:
                print("Found line number", node.lineno)
                self.lineno = node.lineno

    def search(self, node, expr):
        self.expr = expr
        self.visit(node)
        return self.lineno
        
code = inspect.getsource(printing)

lineno = GetAssignments().search(ast.parse(code), 'eprint')
line = code.split('\n')[lineno-1]
print(lineno, line)

相关问题 更多 >

    热门问题