如何以编程方式访问Python代码?例如,获取类列表、文档字符串等?

如何以编程方式访问Python代码?例如,获取类列表、文档字符串等?,python,Python,我试图将python代码(特别是单元测试)作为结构化对象来阅读 比如说 class ProjectA(unittest.TestCase): def testB(self): """ hello world B """ assert False def testA(self): """ hello world """ assert False 我想

我试图将python代码(特别是单元测试)作为结构化对象来阅读

比如说

class ProjectA(unittest.TestCase):

    def testB(self):
        """
        hello world B
        """
        assert False

    def testA(self):
        """
        hello world
        """
        assert False
我想将此代码文件读入一个对象,如下所示:

{
    'classes': [{'ProjectA': [__init__, testA, testB]}]
}
我可以通过testA['docstring']阅读testA的


基本上,我希望将python代码的结构放入一个可以解析的对象中

像这样的东西叫什么?(这样我就可以了解它)


谢谢大家!

您可以使用

探索该类,这就是模块的用途——生成Python源代码的抽象语法树:

>>> import ast
>>> source = '''import unittest
...
...
... class ProjectA(unittest.TestCase):
...
...     def testB(self):
...         """
...         hello world B
...         """
...         assert False
...
...     def testA(self):
...         """
...         hello world
...         """
...         assert False'''
>>> tree = ast.parse(source)
>>> for node in ast.walk(tree):
...    print node
...
<_ast.Module object at 0x103aa5f50>
<_ast.Import object at 0x103b0a810>
<_ast.ClassDef object at 0x103b0a890>
<_ast.alias object at 0x103b0a850>
<_ast.Attribute object at 0x103b0a8d0>
<_ast.FunctionDef object at 0x103b0a950>
<_ast.FunctionDef object at 0x103b0ab10>
<_ast.Name object at 0x103b0a910>
<_ast.Load object at 0x103b02190>
<_ast.arguments object at 0x103b0a990>
<_ast.Expr object at 0x103b0aa10>
<_ast.Assert object at 0x103b0aa90>
<_ast.arguments object at 0x103b0ab50>
<_ast.Expr object at 0x103b0abd0>
<_ast.Assert object at 0x103b0ac50>
<_ast.Load object at 0x103b02190>
<_ast.Name object at 0x103b0a9d0>
<_ast.Str object at 0x103b0aa50>
<_ast.Name object at 0x103b0aad0>
<_ast.Name object at 0x103b0ab90>
<_ast.Str object at 0x103b0ac10>
<_ast.Name object at 0x103b27d50>
<_ast.Param object at 0x103b02410>
<_ast.Load object at 0x103b02190>
<_ast.Param object at 0x103b02410>
<_ast.Load object at 0x103b02190>
导入ast >>>source=''导入单元测试 ... ... ... ProjectA类(unittest.TestCase): ... ... def测试B(自身): ... """ …你好,世界B ... """ ... 断言错误 ... ... def testA(自我): ... """ ……你好,世界 ... """ ... 断言为False“” >>>tree=ast.parse(源代码) >>>对于ast.walk(树)中的节点: ... 打印节点 ...
我马上想到两条路线:实例化类和访问命名空间中的dunder方法。将包含类的.py文件作为文本文件读入Python,并根据class和def关键字以及三重引号提取信息。
import;help()
将为您自动生成该文件的文档。这不是你正在寻找的dict,但如果你只是想快速查看所有文档串,那么这可能是最好的选择。