Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在创建类的实例时要使用元组而不是整数?_Python_Class_Tuples - Fatal编程技术网

Python 为什么在创建类的实例时要使用元组而不是整数?

Python 为什么在创建类的实例时要使用元组而不是整数?,python,class,tuples,Python,Class,Tuples,我正在做一个小项目,我想从MODBUS从站收集数据,并将它们放入数据库。 我决定用python来做,因为它有一些很好的模块来处理MODBUS和mysql。我对python非常陌生,想先做一些测试,只是为了热身并对该语言有一些基本的了解 我的想法是让一个类的属性与数据库表中的列相同,然后我可以将内容加载到此类的实例中,如果需要,可以对其进行操作,并将数据插入数据库 但是,我遇到了属性类型的问题。我的班级是这样的: class Sensor: def __init__(self, id, s_id,

我正在做一个小项目,我想从MODBUS从站收集数据,并将它们放入数据库。 我决定用python来做,因为它有一些很好的模块来处理MODBUS和mysql。我对python非常陌生,想先做一些测试,只是为了热身并对该语言有一些基本的了解

我的想法是让一个类的属性与数据库表中的列相同,然后我可以将内容加载到此类的实例中,如果需要,可以对其进行操作,并将数据插入数据库

但是,我遇到了属性类型的问题。我的班级是这样的:

class Sensor:
def __init__(self, id, s_id, type, s_pin, off, loc, desc, desc_l):
    self.id = id,
    self.slave_id = s_id,
    self.type = type,
    self.slave_pin = s_pin,
    self.offset = off,
    self.sensor_location = loc,
    self.desc = desc,
    self.desc_long = desc_l
现在,我创建该类的一个实例:

Sens = Sensor(4, 1, "temp", 2, 0.0, "Jupiter", "Temp Sens 4_D1_P2", "Temperature Sensor on Jupiter LOL")
问题是,即使VS代码告诉我4、1和2是整数,字符串是字符串等等,当我调用时:

print(type(Sens.id))
我得到的答案是这是一个

<class 'tuple'>
尽管如此,很明显,它应该是一个int。对于应该是浮点或字符串的偏移量,它应该是相同的

然而,有趣的是,最后一个属性desc_long实际上是一个字符串

我已经在网上搜索过了,我非常确定我的init函数是正确的,我也正确地创建了这个实例。有人能解释一下为什么它是元组,而不是int或float吗?

在这种情况下

self.id = id,
创建单个元素元组。如果添加括号,可能会更明显

self.id = (id,)
删除逗号以防止它们被解释为元组。

在这种情况下

self.id = id,
创建单个元素元组。如果添加括号,可能会更明显

self.id = (id,)

删除逗号以防止它们被解释为元组。

要解决此问题,请从init方法对self的赋值中删除逗号,如下所示:

class Sensor:
    def __init__(self, id, s_id, type, s_pin, off, loc, desc, desc_l):
        self.id = id
        self.slave_id = s_id
        self.type = type
        self.slave_pin = s_pin
        self.offset = off
        self.sensor_location = loc
        self.desc = desc
        self.desc_long = desc_l
如果您有如下声明,则会得到一个元组

var = 3,

要解决此问题,请从init方法对self的赋值中删除逗号,如下所示:

class Sensor:
    def __init__(self, id, s_id, type, s_pin, off, loc, desc, desc_l):
        self.id = id
        self.slave_id = s_id
        self.type = type
        self.slave_pin = s_pin
        self.offset = off
        self.sensor_location = loc
        self.desc = desc
        self.desc_long = desc_l
如果您有如下声明,则会得到一个元组

var = 3,

尾随逗号引入了一个元组。哦,所以我的init是错误的!删除后面的逗号修复了这个问题。非常感谢:后面的逗号引入了一个元组。哦,所以我的init是错误的!删除后面的逗号修复了这个问题。非常感谢你: