Python OOP 实例和类可变性



我一直在做一些阅读并思考这段代码:

def change(c, n: int) -> None:
c.x = n

class Value:
x = 5

m = Value()
change(Value, 3)
print(m.x)
change(m, 1)
change(Value, 2)
print(m.x)

此代码的输出为:

  • 3
  • 1

所以我假设的是对于 3,m 和值是别名,但更改 m 的属性会破坏这一点。我无法通过运行 id(( 来确认这一点 - 事实证明 m 和值总是有不同的 id。

有人可以解释一下发生了什么吗?

更改Value的值时,将更改所有value实例共享的x值。

当您更改m的值时,您只是为mm执行此操作,实质上是用新的实例x覆盖类x。你可以用

k = Value()
print(k.x) # 2

最新更新