1

我有一个包含很少模块(大约 4 个左右)的小型 Python 程序。主模块创建一个元组列表,从而表示许多记录。这些元组可通过一个简单的函数返回给其他模块(比如,get_records())。

但是,我不确定这是否是好的设计。问题是其他模块需要知道元组中每个元素的索引。这增加了模块之间的耦合,并且对于想要使用主模块的人来说不是很透明。

我可以想到几个替代方案:

  1. 使元组元素的索引值可用作模块常量(例如IDX_RECORD_TITLE,、IDX_RECORD_STARTDATE等)。这避免了像title = record[3].

  2. 不要使用元组,而是创建一个记录类,并返回这些类对象的列表。优点是类方法将具有不言自明的名称,例如record.get_title().

  3. 不要使用元组,而是使用字典。因此,在这种情况下,该函数将返回一个字典列表。优点是字典键也是不言自明的(尽管使用该模块的人需要知道它们)。但这似乎是一个巨大的开销。

我发现元组是 Python 的一大优势(很容易传递复合数据而没有类/对象的编码开销),所以我目前使用 (1),但仍然想知道什么是最好的方法。

4

3 回答 3

4

我没有看到通过元组传递对象的任何开销或复杂性(元组也是对象)

如果 tuple 满足您的目的,IMO 可以轻松使用它,但是正如您所看到的,约束只是切换到一个干净地表示您的数据的类,例如

class MyData(object):
    def __init__(self, title, desc):
        self.title = title
        self.desc = desc

您无需添加任何 getter 或 setter 方法。

于 2010-07-06T06:58:19.720 回答
0

在这些情况下,我倾向于使用字典。如果我稍后回来使用代码时让自己容易理解的话。

我不知道这是否是“巨大的开销”。我想这取决于你做它的频率和它的用途。我从最简单的解决方案开始,并在我真正需要时进行优化。令人惊讶的是,我很少需要改变这样的东西。

于 2010-07-06T06:58:52.113 回答