Python class 属性赋值

Python class attribute assignment

我是 Python 的新手,我想知道为什么我无法使用函数更改 class 实例的属性,如果我将实例作为函数参数传递 例如,如果我有:

class sol:
    def __init__(self):
        self.val = 0

def fun1(obj, attrib):
    obj[attrib] = 1

newSol = sol()

fun1(newSol, "val")

为什么 fun1 不能更改对象属性?有没有办法改变它,或者 "val" 属性是不可变的?

Python class 实例和 dict 是完全不同的野兽;您可能来自 JavaScript 背景,其中 obj.foo 等同于 obj["foo"],但这不是 Python 的工作方式。

如果您想通过 str 名称设置属性,use setattr:

def fun1(obj, attrib):
    setattr(obj, attrib, 1)