如何制作wxPython类浏览器

时间:2013-10-01 18:58:08

标签: python wxpython

如何在wxPython中实现类浏览器?我应该扫描整个代码,还是在wxPython中有一个函数?

1 个答案:

答案 0 :(得分:2)

你的问题并不完全清楚你想要什么,但我会做一些假设,并告诉你如何对你所要求的一种可能的解释。

我假设您有一个包含Python脚本内容的字符串,或者来自您的剪切和粘贴存储库的片段,或者其他任何内容,您只想知道该字符串中定义的顶级类。源代码。

您可能不想执行该代码。首先,谁知道任意奇怪的代码可以对您的环境做些什么?另一方面,如果您正在构建类浏览器,您可能希望它能够处理依赖于您可能无法访问的其他代码的代码,因此您无法执行它。

所以,你要解析它。最简单的方法是让Python使用ast模块为您完成:

import ast

with open('mymodule.py') as f:
    mycode = f.read()

myast = ast.parse(mycode)
for thing in myast.body:
    if isinstance(thing, ast.ClassDef):
        print('class {}({})'.format(thing.name, 
                                    ', '.join(base.id for base in thing.bases)))
        for subthing in thing.body:
            if isinstance(subthing, ast.FunctionDef):
                print('    def {}'.format(name))

当我对Python 3.3的stdlib中的ast.py执行此操作时,我得到了这个:

class NodeVisitor(object)
    def visit
    def generic_visit
class NodeTransformer(NodeVisitor)
    def generic_visit

如果这不是您想要的,那么您必须解释您想要的内容。例如,如果你想要所有的类定义,甚至是函数和方法中的本地定义...那么,刚刚抛出的那两个类的名称应该会有所帮助。