属性命名,元组与多个名称

时间:2012-11-04 12:57:25

标签: python class attributes naming-conventions

我在思考班级api的部分内容,其中一件事情如下: 我应该使用相等属性的元组/列表,还是应该使用多个属性,例如假设我有一个Controller类读取几个温度计。

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

VS

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

我应该使用哪种风格的最佳做法?

(我们假设温度计的数量不会改变,否则选择带有列表的第二种风格是显而易见的。)

2 个答案:

答案 0 :(得分:4)

元组或列表,100%。 variable1variable2等......是一种非常常见的反模式。

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

为什么假设数字不会改变?通常情况下,这样的假设最终会出错。无论如何,你已经可以看到第二个例子举例说明了不重复自己成语,这是清晰,高效的代码的核心。

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

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

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

答案 1 :(得分:0)

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

{1: temp1, 2: temp2}

决定如何存储数据最重要的是传递数据的含义,如果这些项在略有不同的上下文中基本上是相同的信息,那么它们应该被分组(就数据而言)输入 - 即它们应该存储为元组或字典。

注意:如果您使用元组然后插入更多数据,例如一开始是temp0,那么可能存在向后兼容性问题,你已经抓住了各个变量。 (使用字典temp[1]将始终返回temp1。)