类变量(类对象变量)和实例对象变量详解

类变量总结:

第一:

  • 作为类对象的变量每次创建一个新的实例对象时,类对象变量就多一个引用指向它

  • 通过实例对象来修改类对象变量的取值,实际上是让实例对象的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 里被赋值

 

posted @ 2022-10-30 16:25  yudai  阅读(392)  评论(0编辑  收藏  举报