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
我在 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 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