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

标签 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 上的值。

最佳答案

感谢 @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() 的同级函数,它允许您设置属性。

关于python - 如何使用变量动态访问/覆盖类中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55465341/

相关文章:

python - 减少 Django 内存使用。低悬的果实?

string - ZipFile 中的 namelist() 返回编码无效的字符串

python - super() 对象的动态方法解析

python - 提交 PySpark 应用以在集群模式下在 YARN 上产生 Spark

python - 通过 dict of dict of dict 计算值

Python 3 : How to ignore line breaks when using input()

python - 我正在尝试创建一个程序,将 2 个(用户)输入转换为列表,然后打印列表中的重复项

ios - 是否可以将动态变量用于类成员变量

Ruby:扩展模块的类

c# - 使用子类和方法的最佳方式