您好我正在开发一个使用Phidget传感器的系统,并且在尝试将一些变量写入数据库时遇到了一些问题。我已经阅读了相当多的类和调用变量,但我只是无法运行此代码。
我的代码在下面,你可以看到我在调用数据库方法时放了'self'参数,但它抱怨'self'没有定义。如果我没有自我,我会得到一个投诉'数据库()缺少1个必要的位置参数:'self''
connection = sqlite3.connect('testing.db')
cursor = connection.cursor()
class sensors():
def interfaceKitAttached(self, e):
attached = e.device
print("InterfaceKit %i Attached!" % (attached.getSerialNum()))
def sensorInputs(self, e):
temperature = (interfaceKit.getSensorValue(0)*0.2222 - 61.111)
self.sound = (16.801 * math.log((interfaceKit.getSensorValue(1))+ 9.872))
light = (interfaceKit.getSensorValue(2))
print("Temperature is: %i " % temperature)
print("Sound is : %i" %self.sound)
print("Light is: %i \n" %light)
interfaceKit.setSensorChangeTrigger(0, 25)
interfaceKit.setSensorChangeTrigger(1, 35)
interfaceKit.setSensorChangeTrigger(2, 60)
def database(self):
cursor.execute('''CREATE TABLE events1
(sensor text, value text)''')
cursor.execute ('INSERT INTO events1 VALUES (?, ?)', ('sounding', self.sound))
connection.commit()
connection.close()
try:
interfaceKit.setOnAttachHandler(interfaceKitAttached)
interfaceKit.setOnSensorChangeHandler(sensorInputs)
database(self)
由于
答案 0 :(得分:1)
self
不是您在括号中传递的参数。 self
是一个传递的参数如下:
object.method()
在这里,您实际上将对象作为参数传递,self
。
因此,在您的情况下,您实际上需要以object.method()
的形式调用该方法,其中object
是您的方法所在的类的实例。在这种情况下,您的类是sensors
。
所以你不这样做:
database(self)
sensors_object = sensors()
sensors_object.database()
当您拨打sensors_object = sensors()
电话时,您会创建一个新的sensors
对象。然后在后面的行中调用OBJECT的方法而不是CLASS的方法。
[注意:]我建议您创建def __init__(self):
方法。这是在创建类的新实例时调用的方法。在此__init__
方法中,您将所需的所有不同变量初始化为self.variable_name = something