我在思考班级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))
我应该使用哪种风格的最佳做法?
(我们假设温度计的数量不会改变,否则选择带有列表的第二种风格是显而易见的。)
答案 0 :(得分:4)
元组或列表,100%。 variable1
,variable2
等......是一种非常常见的反模式。
考虑一下你以后如何编码 - 你很可能想要对这些项目做类似的事情。在数据结构中,您可以循环遍历它们以执行操作,使用带编号的变量名称,您必须手动执行此操作。不仅如此,它还可以更轻松地添加更多值,它使您的代码更通用,因此更具可重用性,并且意味着您可以轻松地在执行过程中添加新值。
为什么假设数字不会改变?通常情况下,这样的假设最终会出错。无论如何,你已经可以看到第二个例子举例说明了不重复自己成语,这是清晰,高效的代码的核心。
即使您有更多相关名称,例如:cpu_temperature
,hdd_temperature
,我会说如果您看到自己对它们执行相同的操作,您需要一个数据结构,而不是很多变量。在这种情况下,字典:
temperatures = {
"cpu": ...,
"hdd": ...,
...
}
主要的是,通过将数据存储在数据结构中,您可以为软件提供有关您提供的分组的信息。如果你只是给他们变量名,你只是告诉程序员 - 如果他们被编号,那么你甚至不会告诉程序员他们是什么。
答案 1 :(得分:0)
另一种选择是将它们存储为字典:
{1: temp1, 2: temp2}
决定如何存储数据最重要的是传递数据的含义,如果这些项在略有不同的上下文中基本上是相同的信息,那么它们应该被分组(就数据而言)输入 - 即它们应该存储为元组或字典。
注意:如果您使用元组然后插入更多数据,例如一开始是temp0
,那么可能存在向后兼容性问题,你已经抓住了各个变量。 (使用字典temp[1]
将始终返回temp1
。)