本文实例形式讲解了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后台立刻拷贝类变量的副本并交给该对象进行写入操作。从那刻起,该对象读取和写入的都是自身持有的类变量的副本。