我只是回到編碼後幾年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