0

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

4

1 回答 1

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

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

于 2013-10-01T19:20:22.053 回答