关于python类方法可以统改实例属性,代码如下:
class date:
def __init__(self):
print("date被创建")
def cx(self,x):
print("cx被调用")
date.x = x
def cs(self,s):
print("cs被调用")
self.s = s
dt0 = date()
dt1 = date()
dt0.cx(10)
dt0.cs(10)
print(dt0.x,dt0.s)
dt1.cx(50)
dt1.cs(50)
print(dt1.x,dt1.s)
print(dt0.x,dt0.s)
#date.s = 100
print(dt0.s,dt1.s)
date.cs(date,100)
print(dt0.s,dt1.s)
print(date.s)
输出如下:
date被创建
date被创建
cx被调用
cs被调用
10 10
cx被调用
cs被调用
50 50
50 10
10 50
cs被调用
10 50
100
问题描述:
从输出来看,执行d1.cx会将所有date实例的属性x修改(甚至没有x属性的date实例也会被赋予x属性),因为cx方法定义中是用date.x来修改x属性而不是self.x修改属性,所以任意date实例调用cx方法将统改所有已创建date实例的x属性,这点可以理解。
但是后面这段
date.cs(date,100)
它的执行就不能理解了,由后面输出可以看到,这里没有创建新的date实例,也没有统改所有date实例的s属性,但输出date.s却可以输出,也就是这段代码单独创建了了一个date.s,这里我非常不理解,这个date.s该如何解释呢?