本文實例形式講解了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后台立刻拷貝類變量的副本並交給該對象進行寫入操作。從那刻起,該對象讀取和寫入的都是自身持有的類變量的副本。
