我正在尝试将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代码的结构放入一个我可以解析的对象中。
这样的事情会被称为什么? (所以我可以读一读)
谢谢!
答案 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
探索课程