【发布时间】:2010-12-19 08:49:24
【问题描述】:
我在中断了几年后才重新开始编码,我正在尝试以某种方式对多层静态表单进行建模,以使我能够在特定表单级别或整个子树上抓取和执行操作。
示例表单层次结构:
- 我的表单
- 问题 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 中没有得到很好的支持。但即使我能找到使用嵌套类的解决方案,我仍然想知道是否有更好的方法将此表单信息存储在某个地方,以便非编码人员更容易编辑(可能是纯文本模板),然后加载运行时的数据,因为它是静态的,我经常需要它在内存中。表单数据的更新不会超过每月一次。不管我如何存储数据,我都想找出一个好的数据结构来表示、遍历和操作它。
- 有没有办法制作这样的分层属性对象?
- 我可以做一些类似多维命名元组的事情吗?
- 还有其他想法吗?
感谢任何cmets。
【问题讨论】:
标签: python class data-structures data-modeling inner-classes