如何使用变量名更新类变量

时间:2020-04-03 02:43:03

标签: python python-3.x

是否有可能在一个类中使用单个更新方法,该方法将变量作为要更新的类变量名称的输入。

例如。我有一个模仿mysql表的类,我想要一个通用的更新函数来同时更新对象和mysql表

但是很明显,最后一行对于更新对象无效,有没有办法可以做到这一点? 还是每个元素都需要一个函数。

class MyClass(object):
    def __init__(self, a, b, c, db_id):
        self.a = a
        self.b = b
        self.c = c
        self.db_id = db_id

    def update_field(self, field, value, cnx):
        update_query = "update my_table set %s = %s where id = %s"
        cursor = cnx.cursor(buffered=True)
        cursor.execute(update_query, (field, value, self.db_id))
        **self.field = value**

谢谢

1 个答案:

答案 0 :(得分:4)

您可以使用setattr来基于其字符串名称来设置属性,即:

def update_field(self, field, value, cnx):
    update_query = "update my_table set %s = %s where id = %s"
    cursor = cnx.cursor(buffered=True)
    cursor.execute(update_query, (field, value, self.db_id))
    setattr(self, field, value)

setattr(self, field, value)行将field的{​​{1}}属性的值设置为self