如何使用变量动态访问/覆盖类中的字段?

时间:2019-04-02 00:33:21

标签: python python-3.x class

我有一个我想用另一个实例覆盖一个实例的类(一个字段除外)。我的方法与此类似:

for key in my_class_instance_1.__dict__.keys():
    if key != "key_i_dont_want_to_overwrite":
        my_class_instance_1[key] = my_class_instance_2[key]

问题是我收到错误TypeError: 'MyClass' object is not subscriptable

我显然也无法像这样访问实例:my_class_instance_1.f"{key}"

我不知道如何为覆盖目的而动态访问类上的键。我知道我可以使用getattr(my_class_instance_2, key)来访问值,但这不会帮助我覆盖my_class_instance_1上的值。

1 个答案:

答案 0 :(得分:1)

由于@kindall和@ skullgoblet1089的回复,我能够弄清楚这一点,但是对于其他有此问题的人,让我向您展示其工作代码:

for key in my_class_instance_1.__dict__.keys():
    if key != "key_i_dont_want_to_overwrite":
        val = getattr(my_class_instance_2, key)  # the new value
        setattr(my_class_instance_1, key, val)  # overwriting the old value

getattr()有一个名为setattr()的同级函数,可用于设置属性。