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

时间:2016-08-18 13:49:20

标签: python

我正在尝试将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代码的结构放入一个我可以解析的对象中。

这样的事情会被称为什么? (所以我可以读一读)

谢谢!

2 个答案:

答案 0 :(得分:2)

这是ast模块的用途 - 生成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>

答案 1 :(得分:0)

您可以使用inspect

探索课程