Я только вернусь к кодированию после нескольких лет перерыва, и я пытаюсь моделировать многоуровневые статические формы таким образом, чтобы я мог захватывать и выполнять операции на определенного уровня формы или всего поддерева.Структура/объект данных Python для моделирования статической многомерной таблицы
Пример Форма иерархии:
- MyForm
- Вопрос 1
- Часть 1
- Вопрос 1.1
- Часть 2
- Вопрос 2.1
- Подчасти 1
- Вопрос 2.1.1
- Вопрос 2.1.2
- Вопрос 2
Каждый вопрос будет иметь несколько атрибутов (текст вопроса, является ли это обязательным полем и т. Д.), А вопросы могут быть на любом уровне иерархии.
Я хотел бы быть в состоянии сделать что-то вроде этого:
>>> MyForm.getQuestionObjects()
[Question1, Question1_1, Question2_1, Question2_1_1, Question2_1_2, Question2]
>>> MyForm.Part2.getQuestionObjects()
[Question2_1, Question2_1_1, Question2_1_2]
и/или таких вещей, как:
>>> # Get questions (return class members)
>>> MyForm.SubPart1.getQuestions()
(('2.1.1 text', otherAttributes), ('2.1.2 text', otherAttributes))
>>> # Get questions -- but replace an attribute on 2.1.2
>>> MyForm.Part2.getQuestions(replace_attr('Question_2_1_2', 'text', 'New text'))
(('2.1.1 text', otherAttributes), ('New text', otherAttributes))
Я постоянно пытаюсь сделать это с вложенными/внутренними классами, являются большой головной болью и плохо поддерживаются в python. Но даже если я смогу найти решение с помощью вложенных классов, я продолжаю задаваться вопросом, есть ли куда лучше хранить эту информацию о форме где-нибудь, чтобы облегчить редактирование некодиров (возможно, шаблон простого текста), а затем загрузить данные во время выполнения, так как это статично, и я буду нуждаться в нем в памяти довольно часто. Данные формы не будут обновляться более одного раза в месяц. Независимо от того, как я храню данные, я хотел бы найти хорошую структуру данных для представления, перемещения и работы с ней.
- Есть ли способ создать объект с многоуровневыми атрибутами?
- Мог ли я сделать что-то вроде многомерных именных кортежей?
- Любые другие идеи?
Благодарим за любые комментарии.
Спасибо. Я прочитал lxml и в настоящее время просматриваю http://codespeak.net/lxml/objectify.html, что делает доступ XML доступным как объекты Python. Не уверен, что он подойдет всем моим потребностям, но мне придется поиграть. –
Согласен. Попытка lxml - очень хорошая идея. Я сам использовал lxml, и он работал лучше, чем ElementTree из стандартной библиотеки Python. Это особенно верно, когда вы приходите в поддержку пространства имен XML ... – fviktor