Python 静态属性

Python static attribute

我在 Python 3 中有以下代码:

class x():
    var = 0

x1 = x()
x2 = x()
print(x.var) #0
print(x1.var) #0
print(x2.var) #0

但是如果我更改了一个实例的属性 var,它只会更改此实例:

x1.var = 1
print(x.var) #0
print(x1.var) #1
print(x2.var) #0

我希望结果是:

x1.var = 1
print(x.var) #1
print(x1.var) #1
print(x2.var) #1

实例属性可以隐藏同名的 class 属性。如果你想通过实例更改 class 属性,你必须通过获取对 class 的引用来明确地这样做。否则,您只是在创建一个新的实例属性,而不是更新 class 属性。

class X:
    var = 0

x1 = X()
x2 = X()
type(x1).var = 1

根据@khelwood 的评论,您可以通过引用 instance.__class__:

来更改 class 属性
class x():
    var = 0

x1 = x()
x2 = x()
print(x.var) #0
print(x1.var) #0
print(x2.var) #0

x1.__class__.var = 1
print(x.var) #1
print(x1.var) #1
print(x2.var) #1