为什么通过 class 对象更改对象本身不起作用?

Why changing object itself through class object doesn't work?

class Cat:
    def func(self):
        self = None

a = Cat()

print(a)

a.func()

print(a)

我以为我会得到 None 第二个打印功能,但我得到了两个打印的相同对象地址。为什么我不能用 class 方法修改对象?

在 class 方法中,self 是一个成为局部作用域一部分的参数。分配给任何局部范围变量只会改变局部范围。如果您要分配给 self 的属性,例如

self.foo = “Bar”

然后您将修改对象本身。

此外,该对象在调用(全局)范围内被 a 引用,该引用将防止对象被破坏。

换句话说,selfa 都引用同一个对象,分配 self=None 只会删除其中一个引用。