我有一个由很少的模块组成的小型Python程序(大约4个左右)。主模块创建一个元组列表,从而表示许多记录。这些元组通过一个返回它们的简单函数(例如get_records()
)可供其他模块使用。
我不确定这是不是很好的设计。问题是其他模块需要知道元组中每个元素的索引。这增加了模块之间的耦合,对于想要使用主模块的人来说不是很透明。
我可以想到几个选择:
使元组元素的索引值可用作模块常量(例如IDX_RECORD_TITLE
,IDX_RECORD_STARTDATE
等)。这避免了需要像title = record[3]
这样的幻数。
不要使用元组,而是创建一个记录类,并返回这些类对象的列表。优点是类方法将具有自我解释的名称,如record.get_title()
。
不要使用元组,而是使用字典。所以在这种情况下,该函数将返回一个字典列表。优点是字典键也是不言自明的(尽管使用该模块的人需要知道它们)。但这似乎是一个巨大的开销。
我发现元组是Python的强大功能之一(很容易在没有类/对象的编码开销的情况下传递复合数据),所以我目前使用(1),但仍然想知道什么是最好的方法
答案 0 :(得分:5)
答案 1 :(得分:4)
我没有看到在元组上传递对象的任何开销或复杂性(元组也是对象)
IMO如果元组服务于你的目的很容易使用它,但正如你所看到的那样,约束只是切换到一个代表你的数据的类,例如。
class MyData(object):
def __init__(self, title, desc):
self.title = title
self.desc = desc
您无需添加任何getter或setter方法。
答案 2 :(得分:0)
在这些情况下,我倾向于使用词典。 如果我稍后回来使用代码时,只为自己容易理解。
我不知道这是否是“巨大的开销”。我想这取决于你做多少次以及它用于什么。我从最简单的解决方案开始,并在我真正需要的时候进行优化。令人惊讶的是,我很少需要改变这样的东西。