为什么Python中通过形参无法修改实例的属性值?

具体问题如下,希望通过形参修改实例的属性值,预期输出为1,但是输出结果为None,这是什么原因呢?
所用IDE为Jupyter Notebook。

class A:
    def __init__(self):
        self.a = None

    def insert(self, b, val):
        if not b:
            b = val

A1 = A()
A1.insert(A1.a, 1)

print(A1.a)

运行结果:

None

你A1.insert(A1.a, 1)是把实参A1.a的值复制一份赋值给形参b,
A1.a与形参b没有实质关联,
对方法中形参b重新赋值不会影响实参A1.a
正确方法是这样

class A:
    def __init__(self):
        self.a = None
    def insert(self, b, val):
        if not hasattr(self,b) or getattr(self,b)==None:
            setattr(self,b,val)
A1 = A()
A1.insert('a', 1)
print(A1.a)

如有帮助,望采纳!谢谢!

因为你的A1.a是不可变对象类型(在C和java里叫值类型),它传递的是值而不是引用。
你想通过函数去修改它,那办法其实很多:
1.把A1.a定义成可变对象类型(引用类型),比如self.a=[0],然后你调用A1.insert(A1.a[0],1)就可以改变它了
2.利用函数返回值。在insert函数里写return b,然后调用的时候A1.a=A1.insert(1).python里只要不在变量前面写两个下划线就都是public
3.反射,楼上已经给出代码,就不赘述了