jweinst1
6/22/2019 - 3:51 AM

parse_class.py

>>> import ast
>>> open("foo.py", "r").read()
'\nclass FooHandler(list):\n  pass\n'
>>> parsed = ast.parse(open("foo.py", "r").read())
>>> parsed
<_ast.Module object at 0x10b36c650>
>>> parsed._fields
('body',)
>>> parsed._fields[0]
'body'
>>> parsed._fields['body']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: tuple indices must be integers, not str
>>> parsed.__dict__
{'body': [<_ast.ClassDef object at 0x10b43d950>]}
>>> parsed['body']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'Module' object has no attribute '__getitem__'
>>> parsed.body
[<_ast.ClassDef object at 0x10b43d950>]
>>> parsed.body[0]
<_ast.ClassDef object at 0x10b43d950>
>>> parsed.body[0]._fields
('name', 'bases', 'body', 'decorator_list')
>>> parsed.body[0].bases
[<_ast.Name object at 0x10b43d990>]
>>> parsed.body[0].bases[0]._fields
('id', 'ctx')
>>> parsed.body[0].body._fields
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute '_fields'
>>> parsed.body[0].body
[<_ast.Pass object at 0x10b43d9d0>]
>>> parsed.body[0].bases[0]._fields
('id', 'ctx')
>>> parsed.body[0].bases[0].id
'list'
>>> parsed.body[0].bases[0].attr
'c'
>>> parsed.body[0].bases[0].value.attr
'b'
>>> parsed.body[0].bases[0].value.value
<_ast.Name object at 0x10576fc90>
>>> parsed.body[0].bases[0].value.value.id
'a'
>>> parsed.body[0].bases[0]
<_ast.Attribute object at 0x10576fc10>
>>> parsed.body[0].bases[0].value
<_ast.Attribute object at 0x10576fc50>
>>> parsed.body[0].bases[0]
<_ast.Attribute object at 0x10576fc10>
>>> parsed.body[0].bases[0].attr
'c'
>>> parsed.body[0].bases[0].value
<_ast.Attribute object at 0x10576fc50>
>>> parsed.body[0].bases[0].value.attr
'b'
>>> parsed.body[0].bases[0].value.value
<_ast.Name object at 0x10576fc90>
>>> parsed.body[0].bases[0].value.value.id
'a'