Получить упорядоченный список атрибутов модуля Python
Мне нужно получить список атрибутов модуля Python.
Ловушка, и именно здесь этот вопрос отличается, например, от этого, это то, что я хочу, чтобы список упорядочивался в соответствии с порядком, который они отображают в модуле.
В качестве примера рассмотрим модуль
# a_module.py
b1 = 1
a0 = 1
a1 = 2
Мне нужен список ['b1', 'a0', 'a1']
.
Что я пробовал:
>>> import a_module
>>> dir(a)
[..., 'a0', 'a1', 'b1']
>>> from inspect import getmembers
>>> [x[0] for x in getmembers(a_module)]
[..., 'a0', 'a1', 'b1']
Есть ли способ получить список без необходимости разбирать файл?
Ответы
Ответ 1
Да, вам придется разбирать файл. Вам не нужно писать собственный парсер, но вы можете использовать ast
libary.
Использование файла примера
# a_module.py
b1 = 1
a0 = 1
a1 = 2
Вы можете проанализировать атрибуты таким образом.
import ast
members = []
with open('file.py', 'r') as f:
src = f.read()
tree = ast.parse(src)
for child in tree.body:
if isinstance(child, ast.Assign):
for target in child.targets:
members.append(target.id)
print members
# ['b1', 'a0', 'a1']
Этот небольшой script рассматривает только атрибуты верхнего уровня. Он игнорирует такие вещи, как импорт и определения классов и функций. У вас может быть более сложная логика в зависимости от того, сколько информации вы хотите извлечь из проанализированного файла.
Ответ 2
Нет никакого способа без разбора файла.
Порядок атрибутов не имеет значения для программирования, если вы не пытаетесь документировать. Если это ваш случай, посмотрите http://www.sphinx-doc.org/