如何在wxPython中实现类浏览器?我应该扫描整个代码,还是在wxPython中有一个函数?
答案 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
如果这不是您想要的,那么您必须解释您做想要的内容。例如,如果你想要所有的类定义,甚至是函数和方法中的本地定义...那么,刚刚抛出的那两个类的名称应该会有所帮助。