Python 属性命名、元组与多个名称

Python 属性命名、元组与多个名称,python,class,attributes,naming-conventions,Python,Class,Attributes,Naming Conventions,我在考虑我的类api的部分内容,出现了以下内容: 我应该使用相等属性的元组/列表还是应该使用多个属性,例如,假设我有一个控制器类,它可以读取多个温度计 class Controller(object): def __init__(self): self.temperature1 = Thermometer() self.temperature3 = Thermometer() self.temperature2 = Thermometer(

我在考虑我的类api的部分内容,出现了以下内容: 我应该使用相等属性的元组/列表还是应该使用多个属性,例如,假设我有一个
控制器
类,它可以读取多个温度计

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

我应该使用哪种风格有最佳实践吗


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

一个元组或列表,100%<代码>变量1,
变量2
等。。。是一种非常常见的反模式

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

为什么要假设这个数字不会改变?通常情况下,这样的假设最终都是错误的。无论如何,您已经可以看到第二个示例例举了Don't repeat yourself成语,它是清晰高效代码的核心

即使您有更相关的名称,例如:
cpu\u-temperature
hdd\u-temperature
,我想说的是,如果您看到自己对它们执行相同的操作,您需要的是数据结构,而不是大量的变量。在本例中,字典:

temperatures = {
    "cpu": ...,
    "hdd": ...,
    ...
}
{1: temp1, 2: temp2}

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

一个元组或列表,100%<代码>变量1,
变量2
等。。。是一种非常常见的反模式

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

为什么要假设这个数字不会改变?通常情况下,这样的假设最终都是错误的。无论如何,您已经可以看到第二个示例例举了Don't repeat yourself成语,它是清晰高效代码的核心

即使您有更相关的名称,例如:
cpu\u-temperature
hdd\u-temperature
,我想说的是,如果您看到自己对它们执行相同的操作,您需要的是数据结构,而不是大量的变量。在本例中,字典:

temperatures = {
    "cpu": ...,
    "hdd": ...,
    ...
}
{1: temp1, 2: temp2}

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

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

temperatures = {
    "cpu": ...,
    "hdd": ...,
    ...
}
{1: temp1, 2: temp2}
在决定如何存储数据时,最重要的事情是传递数据的含义,如果这些项在稍微不同的上下文中本质上是相同的信息,那么它们应该分组(根据数据类型)来传递,也就是说,它们应该存储为元组或字典


注意:如果使用元组,然后在开始时插入更多数据,例如
temp0
,则在获取单个变量时可能存在向后兼容性问题。(使用字典
temp[1]
将始终返回
temp1

另一个选项是将它们存储为字典:

temperatures = {
    "cpu": ...,
    "hdd": ...,
    ...
}
{1: temp1, 2: temp2}
在决定如何存储数据时,最重要的事情是传递数据的含义,如果这些项在稍微不同的上下文中本质上是相同的信息,那么它们应该分组(根据数据类型)来传递,也就是说,它们应该存储为元组或字典


注意:如果使用元组,然后在开始时插入更多数据,例如
temp0
,则在获取单个变量时可能存在向后兼容性问题。(使用字典
temp[1]
将始终返回
temp1

是否可以以任何方式区分不同的温度?什么使温度1和温度3不同?我会尝试找出这种区别,使用第一种情况,然后命名温度,如temperatureInner、temperatureOuter等。是否有可能以任何方式区分不同的温度?什么使温度1和温度3不同?我会尝试找出这种区别,使用第一种情况,然后命名温度,如temperatureInner、temperatureOuter等。为什么元组会有向后兼容性问题?@Lattyware如果插入
temp0
使其
(temp0、temp1、temp2等)
,而不是
(temp1,tent2,…
(访问第一个元素将不再获得temperature1)。哦,那么您是说每个编号的温度都需要完全不同的处理,并通过索引进行访问?我假设如果数据存储在列表/元组中,它将被迭代(这显然不会受到添加新项目的影响),而根据我的回答,如果需要单独处理,则会使用字典。为什么元组会有向后兼容性问题?@Lattyware如果插入
temp0
,使其
(temp0,temp1,temp2…)
,而不是
(temp1,temp2,…
(访问t