类变量和成员变量

类变量

在类里面定义,且不位于构造或者成员函数里面,同时没有" 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

 

总结:类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象

参考资料

1. Python中的类变量和成员变量

posted @ 2023-06-03 11:12  苏格拉底的落泪  阅读(114)  评论(0编辑  收藏  举报