为什么在创建类的实例时得到元组而不是整数?

时间:2019-01-09 15:04:56

标签: python class tuples

我正在做一个小项目,我想从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 ()函数正确无误,并且我也在正确创建实例。谁能向我解释为什么它是一个元组,而不是整数(或浮点数)?

2 个答案:

答案 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,