【问题标题】:How to dynamically access/overwrite a field in a class using a variable?如何使用变量动态访问/覆盖类中的字段?
【发布时间】:2019-04-02 00:33:20
【问题描述】:

我有一个类,我想用另一个实例覆盖一个实例(一个字段除外)。我的方法是这样的:

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

【问题讨论】:

标签: python python-3.x class


【解决方案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() 的兄弟函数,它允许您设置属性。

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多