H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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

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方式,但也可能有其它方式我没有找到。

本文地址:H5W3 » 如何用Abstract Syntax Tree的方式,获取到所有继承过来的方法

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址