代码改变世界

Python中的类变量和成员变量

2022-02-21 21:32  jetwill  阅读(2476)  评论(0编辑  收藏  举报

本文实例形式讲解了python的类变量和成员变量用法,对于Python程序设计有一定的参考价值。分享给大家供大家参考。具体如下:

先看看下面这段代码:

class TestClass(object):


    val1 = 100


    def __init__(self):
        self.val2 = 200


    def fcn(self, val=400):
        val3 = 300
        self.val4 = val
        self.val5 = 500


if __name__ == '__main__':
    inst = TestClass()
    print(TestClass.val1) # 100
    print(inst.val1) # 100
    print(inst.val2) # 200
    #print(inst.val3)
    #print(inst.val4)
    #print(inst.val5)
    inst1 = TestClass()
    inst2 = TestClass()

    print(TestClass.val1)  # 100
    print(inst1.val1)  # 100

    inst1.val1 = 1000
    print(inst1.val1)  # 1000
    print(TestClass.val1)  # 100

    TestClass.val1 = 2000
    print(inst1.val1)  # 1000
    print(TestClass.val1)  # 2000

    print(inst2.val1)  # 2000

    inst3 = TestClass()
    print(inst3.val1)  # 2000

这里,val1是类变量,可以由类名直接调用,也可以由对象来调用;
val2是成员变量,可以由类的对象来调用,这里可以看出成员变量一定是以self.的形式给出的,因为self的含义就是代表实例对象;
val3不是成员变量,它只是函数fcn内部的局部变量;
val4和val5也都不是成员变量,虽是以self.给出,但并没有在构造函数中初始化。

可以发现:Python的类变量和Java的类变量(静态变量)不同,类本身拥有自己的类变量(保存在内存)。当通过对象名读取类变量时,读取的实际上是该类所持有的类变量。一旦通过对象名写入类变量时,实际上Python后台立刻拷贝类变量的副本并交给该对象进行写入操作。从那刻起,该对象读取和写入的都是自身持有的类变量的副本。