如何用Abstract Syntax Tree的方式,获取到所有继承过来的方法

发布于 2022-09-06 02:27:53 字数 804 浏览 26 评论 0

test.py文件当中定义了一个继承出来的类InheritedClass,想通过文件扫描的方式,用ast库来找出所有这个类中的继承过来的方法。

# test.py
from PyQt5 import QtWidgets


class InheritedClass(QtWidgets.QDialog, QtWidgets.QMainWindow):
    def closeEvent(self, bool):
        pass

下面是ast的文件扫描读取方式,visit_ClassDef这个方法可以定位出test.py文件中所有的类定义,和它的父类名称,以及一些属性,但是我现在卡在如何在这些找到的父类中,获取到所有继承过来的方法。

import ast

file = open('test.py', 'r')
source = file.read()


class NodeVisitor(ast.NodeVisitor):

    def visit_ClassDef(self, node):
        for base in node.bases:
            print base.__dict__


node = ast.parse(source)
visitor = NodeVisitor()
visitor.visit(node)

或许还有其它方式,我知道dir(InheritedClass)的方式可以,但是我这边的方式是扫描目录中的所有py文件,然后进行方法名称的检查,类似PEP8的flask8检查但不完全遵照PEP8,所以需要通过ast方式,但也可能有其它方式我没有找到。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文