调用方法时没有定义自变量?

时间:2014-03-24 09:25:04

标签: python class methods self

您好我正在开发一个使用Phidg​​et传感器的系统,并且在尝试将一些变量写入数据库时​​遇到了一些问题。我已经阅读了相当多的类和调用变量,但我只是无法运行此代码。

我的代码在下面,你可以看到我在调用数据库方法时放了'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)

由于

1 个答案:

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