关于魔法方法中静态属性的一点疑问
class C:count = 0# 静态属性
def __init__(self):
C.count = C.count + 1# 类名.属性名的形式引用
def getCount(self):
return C.count
为什么这样会修改C.count的值,类似函数的局部变量和全局变量count = 0类似全局变量,在__init__()方法中试图修改C.count的值,不是会创建一个同名局部变量进行代替吗?这块不太明白,类的方法不是类似于函数吗 占楼 不是,这是直接修改类属性,不是全局变量 请看代码
class C:
# 这个不叫静态属性,这个叫类属性
count = 0
def __init__(self):
# 此操作在类进行实例化时修改了类属性
C.count = C.count + 1# 类名.属性名的形式引用
def getCount(self):
return C.count
# 这样才不会修改类属性
class C:
count = 0
def __init__(self):
count += 1
def getCount(self):
return C.count
nahongyan1997 发表于 2020-7-31 17:30
请看代码
# 这样才不会修改类属性
class C:
count = 0
def __init__(self):
count += 1
def getCount(self):
return C.count这样会报错。
你先要知道类中各个属性是怎么定义的:
类体中,所有函数之外:此范围定义的变量,称为类属性或类变量;
类体中,所以函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量;
类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量;
这里的静态属性,实际上就是类属性,而类属性作用的空间是在于整个类中,所以在类中类属性 count 就相当于全局变量,而且只要是这个类的实例,都能使用这个属性
而且你有没发现,在访问 类属性 count 时候都要带上类名,说明就是指这个类的属性
而类的方法中如果定义了一个 count,那么这个 count 才算局部变量哈
永恒的蓝色梦想 发表于 2020-7-31 18:49
这样会报错。
报错是因为局部变量的的原因对吧,要改就得声明nonlocal count,或者用C.count 方法
页:
[1]