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