类变量(类对象变量)和实例对象变量详解
类变量总结:
第一:
-
作为类对象的变量每次创建一个新的实例对象时,类对象变量就多一个引用指向它
-
通过实例对象来修改类对象变量的取值,实际上是让实例对象的data指向了另外一块内存变量。实例对象是类对象的一个拷贝。
第二:
-
改变类对象的变量的值后,相应实例的值也会发生变化。
-
类对象的变量在实例中实际上是只读的,任何实例都无法修改类对象变量的值(test1.data=2 实际上是让实例的变量指向了另一块内存,当再生成一个新的对象时,值仍然还是1),通过实例对象.__class_.data可以修改类对象的属性值。
类变量和实例变量的区别在于:
-
类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;
-
实例变量则属对象私有,某一个对象将其值改变,不影响其他对象
python类变量被赋值
(1)类的设计里:
class里def外,通过变量名能被赋值
def里通过类对象即类名字的点运算变量名可被赋值
(2)程序里:通过类对象(类名字)的点运算类名字也可被赋值
Python实例对象变量被赋值
(1)类的设计时:def里通过self点变量名被赋值,init里和其他已被调用的方法函数里都可以
(2)程序里:通过实例对象的点运算变量名可被赋值
# 类和实例 变量被赋值 class test(object): new = "new 变化前" # 通过变量名能被赋值 old = "old 变化前" def __init__(self): self.num = "num 变化前" self.age = "age 变化前" def freedom(self): test.new = "new def 里被赋值" self.num = "num def 里被赋值" t = test() test.old = "old 程序里被赋值" t.age = "num 程序里被赋值" print(t.age) # num 程序里被赋值 print(test.old) # old 程序里被赋值 t.freedom() print(test.new) # new def 里被赋值 print(t.num) # num def 里被赋值