⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getallrelatedclasses.py

📁 Python Development Environment (Python IDE plugin for Eclipse). Features editor, code completion, re
💻 PY
字号:


"""

def getAllRelatedClasses(root,classfqn):
    classobj = getTypeOf(root,classfqn)
    rootClasses = _getRootClasses(classobj)
    #print rootClasses
    relatedClasses = [] + rootClasses
    for rootClass in rootClasses:
        relatedClasses += _getAllSubClasses(rootClass,root)
    return relatedClasses

def _getRootClasses(klass):
    if klass is None:  # i.e. dont have base class in our ast
        return None
    if klass.getBaseClassNames() == []:  # i.e. is a root class
        return[klass]
    else:
        rootclasses = []
        for base in klass.getBaseClassNames():
            baseclass = getTypeOf(klass,base)
            rootclass = _getRootClasses(baseclass)
            if rootclass is None:  # base class not in our ast
                rootclass = [klass]
            rootclasses+=rootclass
        return rootclasses


def _getAllSubClasses(baseclass, root, subclasses = []):
    class ClassVisitor:
        def visitSource(self,node):
            self.visit(node.fastparseroot)
            
        def visitClass(self, node):
            for basename in node.getBaseClassNames():
                if basename.find(baseclass.name) != -1 and \
                       getTypeOf(node,basename) == baseclass:
                    subclasses.append(node)
                    _getAllSubClasses(node,root,subclasses)
            for child in node.getChildNodes():
                self.visit(child)
                
    walk(root, ClassVisitor())
    return subclasses

"""

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -