我正在做一个小项目,我想从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 Code告诉我4、1和2是整数,字符串是字符串等,
print(type(Sens.id))
我得到的答案是
<class 'tuple'>
尽管,显然,它应该是一个int。相同于“偏移”,应该是浮点数或字符串。
但是,有趣的是,最后一个属性“ desc_long”实际上是一个字符串。
我已经在网上搜索了,我很确定我的 init ()函数正确无误,并且我也在正确创建实例。谁能向我解释为什么它是一个元组,而不是整数(或浮点数)?
答案 0 :(得分:3)
在这种情况下
self.id = id,
创建单个元素元组。如果添加括号,可能会更明显
self.id = (id,)
删除逗号以防止将其解释为元组。
答案 1 :(得分:1)
要解决此问题,请从 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,