我只是回到编码后几年hiatus,我试图模拟多层静态窗体的方式,让我抓住和执行操作特定的表单级别或整个子树。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对象相似。不知道它是否适合我的所有需求,但将不得不玩。 – 2009-11-23 06:19:53
我同意。尝试lxml是一个非常好的主意。我自己使用了lxml,它比Python的标准库中的ElementTree更好。当你来到XML命名空间的支持时尤其如此...... – fviktor 2009-11-24 12:04:18