类变量和成员变量
类变量
在类里面定义,且不位于构造或者成员函数里面,同时没有" self. " 的前缀;或者在类外定义,用 类名.类变量名 来新增加类变量。两种使用方法: (1)类名.类变量名(如下的 Test.a) (2)类的实例对象.类变量名(如下的 T.a)
class Test:
a = 1 ### 类变量
def __init__(self):
self.member = 2
def indoor(self, people):
self.member = people
T = Test()
print(Test.a) ## 使用方法(1)
print(T.a) ## 使用方法(2)
>> 1
>> 1
作用范围
类变量可以通过 使用方法(1)进行全局的修改(如操作1所示)
类变量通过 使用方法(2)只能进行局部的修改(如操作2所示)
也就是说 刚开始Test.a 和T1.a 还有 T2.a 都是指向同一地址,Test.a的修改只是修改地址里的值,而没有修改地址,而直接修改实例化对象(如T1.a 或者 T2.a)的数值,会让其实例对象的值指向新的内存空间,并且不再受到类变量Test.a的影响
exp:
class Test:
a = 1
def __init__(self):
self.member = 2
def indoor(self, people):
self.member = people
T1 = Test()
T2 = Test()
print(T1.a)
print(T2.a)
print(Test.a)
print("############ 操作1 ###########")
Test.a = 1000
print(T1.a)
print(T2.a)
print(Test.a)
print("############ 操作2 ###########")
T1.a = 2000
print(T1.a)
print(T2.a)
print(Test.a)
输出:
1
1
1
############ 操作1 ###########
1000
1000
1000
############ 操作2 ###########
2000
1000
1000
class student():
age = 0
name = 'stu'
# age,name是类变量
def __init__(self,age,name):
self.age = age
self.name = name
# 访问实例变量(用self.age self.name)
student1 = student(18,'hello')
print(student1.name)
# 打印实例变量,输出hello
print(student.name)
# 打印类变量,输出stu
总结:类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象