0

我正在考虑我的类 api 的一部分,出现的一件事如下:我应该使用相等属性的元组/列表还是应该使用多个属性,例如,假设我有一个Controller可以读取多个温度计的类。

class Controller(object):
    def __init__(self):
        self.temperature1 = Thermometer()
        self.temperature3 = Thermometer()
        self.temperature2 = Thermometer()
        self.temperature4 = Thermometer()

对比

class Controller(object):
    def __init__(self):
        self.temperature = tuple(Thermometer() for _ in range(4))

当我应该使用哪种风格时,是否有最佳实践?

(假设温度计的数量不会改变,否则选择带有列表的第二种样式会很明显。)

4

2 回答 2

4

元组或列表,100%。variable1, variable2, etc... 是一个非常常见的反模式。

想想你以后如何编码——很可能你会想要对这些项目做类似的事情。在数据结构中,您可以遍历它们以执行操作,使用编号的变量名称,您必须手动完成。不仅如此,它还使添加更多值变得更容易,它使您的代码更通用,因此更可重用,并且意味着您可以轻松地在执行过程中添加新值。

为什么要假设数字不会改变?很多时候,这样的假设最终是错误的。无论如何,您已经可以看到,第二个示例举例说明了不要重复自己的习语,这是清晰、高效代码的核心。

即使您有更相关的名称,例如:cpu_temperature,,hdd_temperature我会说,如果您看到自己对它们执行相同的操作,您需要一个数据结构,而不是很多变量。在这种情况下,字典:

temperatures = {
    "cpu": ...,
    "hdd": ...,
    ...
}

主要的是,通过将数据存储在数据结构中,您可以向软件提供有关您提供的分组的信息。如果你只是给他们变量名,你只是告诉程序员——如果他们被编号,那么你甚至没有真正告诉程序员他们是什么。

于 2012-11-04T13:02:45.570 回答
0

另一种选择是将它们存储为字典:

{1: temp1, 2: temp2}

决定如何存储数据的最重要的事情是传递数据的含义,如果这些项目在稍微不同的上下文中本质上是相同的信息,那么它们应该被分组(根据数据类型)来传递——即它们应该是存储为元组或字典。

注意:如果您使用元组,然后插入更多数据,例如temp0在开头插入 a,那么您可能会在获取单个变量的情况下出现向后兼容性问题。(使用字典temp[1]将始终返回temp1。)

于 2012-11-04T13:05:50.423 回答