Получить упорядоченный список атрибутов модуля 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/