我在Python中寻找适当的数据结构来处理可变结构化的表单。通过可变结构化形式,我的意思是表格字段的数量和表格内容的类型不是预先知道的。它们由用户填写表单来定义。
将数据放入A)对象属性(例如,其他空的“形式” - 类)或B)简单列出/决定的优缺点是什么?考虑我必须保留表单字段的顺序,表单字段名称和类型。
(奇怪的是,很难找到关于这个话题的确凿信息。由于我还是Python新手,我可能会搜索错误的术语。如果我的问题不够明确,请在评论中提问我会尽力澄清。)
答案 0 :(得分:5)
在Python中,与所有面向对象的语言一样,类的目的是关联数据和与该数据相关的密切相关的方法。如果没有真正的封装(即方法有助于定义与数据交互的方式),那么最好的选择就是你提到的内置类型集合,如列表和字典,也许还有一些实用函数可以作用于那些类型的数据结构。
答案 1 :(得分:4)
Python类实际上只是两个dicts(一个用于函数,一个用于数据),一个名称以及Python查找键的规则。当您访问现有密钥时,dict绝对没有区别(除非您覆盖了原因的访问规则)。
这意味着完全使用类没有任何缺点(除了更多的代码),你永远不应该害怕来编写一个类。
在您的特定情况下,我认为您应该使用类,原因很简单:您可能希望稍后扩展它们。也许你想在一天的字段上添加名称(长度,允许的字母,唯一性......)或值(非空,长度,类型......)的约束。也许您想要验证表单中的所有字段。如果您使用类,则可以执行此操作而无需更改类外的任何代码!正如我之前所说,即使你没有,也没有缺点!
我想我对课程的经验法则是:如果你完全确定没有任何内容可以添加,请不要使用课程。如果不是只写那些额外的行。
答案 2 :(得分:0)
将成员随机添加到对象中并不是非常Pythonic。如果你使用成员方法来做它会更加Pythonic,但仍然不是通常的方式。
我见过的每一个图书馆都使用词典或列表。这就是处理问题的惯用Python方式。有时他们使用覆盖__getitem__
的对象,因此它可以像字典或列表一样运行,但它仍然是用于访问字段的字典语法。
我认为所有的优点和缺点都与人们理解你的代码有关,因为我从未见过处理这个问题的代码,因为有一个可以出现的成员的对象我不认为很多人会找到代码这样做是非常容易理解的。
答案 3 :(得分:0)
字典列表(例如[{“type”:“text”,“name”:“field_name”,“value”:“test value”},...])将是一个可用的结构,如果我正确理解你的要求。
在这种情况下,对象是否更好取决于您以后要做的事情。如果您将对象用作数据存储,则无法获得任何收益。也许一个字段对象列表,它们实现了一些适当的方法来处理你的数据,也是一个不错的选择。
答案 4 :(得分:0)
也许如果你设置一个对象用于每个字段并将它们存储在一个列表中,但这实际上最终就像一个美化的字典
然后您可以像
一样访问它领域[2]。名称 领域[2]。价值
ECT