Python - 属性莫名其妙地改变它们之间没有任何变化?

时间:2015-03-28 21:31:15

标签: python attributes wxpython

我无法弄清楚这是怎么回事,这是一个类中的相关代码:

    def flip_states(self, newValue):
        ...
        self.currentState = newValue
        self.currenStateStr = genConfig.SENSOR_STATE_TO_STR[newValue]
        self.update_field_in_db("currentState", self.currentState)
        self.update_field_in_db("currentStateStr", self.currenStateStr)
        wx.CallAfter(dispatcher.send, eventConfig.ELEMENT_STATE_LISTENER, 
           orders=[self.genType, self.currentStateStr, self.name, self.id])

很简单,但update_field_in_db调用获取新重新分配的self.currentStateStr版本,但wx.CallAfter调用获取self.currentStateStr的旧值

当我输入从db调用接收到的currentStateStr值的打印时,它是正确的并且db按预期更新 - 然后我在db调用之后但在wx.CallAfter之前立即在此函数中打印回到原来的状态。

我想也许这与Python分配列表的方式有关,但我可以打印没有列表的属性,它们仍然是旧的。我已经搜索了db调用,以确保没有其他任何事情发生改变它们。谁能看到我哪里出错?

编辑1:

update_field_in_db是这样的:

def update_field_in_db(self, updateCol, updateTarget):
        self.database.update_element(updateCol=updateCol, updateTarget=updateTarget, **self.dbArgs)

然后database.update_element是:

def update_element(self, elementType, updateCol, updateTarget, whereCol, whereTarget, updateAll=False):
        self.open_cursor()
        if not updateAll:
            addQuotes1 = "'" if type(updateTarget).__name__ == "str" else ""
            addQuotes2 = "'" if type(whereTarget).__name__ == "str" else ""
            query = "UPDATE " + genConfig.DB_TABLES[elementType] + " SET {0} = {add1}{1}{add1} WHERE {2} = {add2}{3}{add2}"
            self.execute_query(query.format(updateCol, updateTarget, whereCol, whereTarget, add1=addQuotes1, add2=addQuotes2))
        else:
            pass # Not Implemented Yet
        self.close_cursor()

1 个答案:

答案 0 :(得分:0)

currentStateStr在赋值和DB调用中没有t拼写,它与wx.CallAfter调用中的t拼写。

只是一个拼写错误,但很难看到 - Eclipse强调所有同名的变量最终揭示了它。