先上代碼吧。
# -*- coding: utf-8 -*-class Tools():#---------------------------線程鎖--------------------------------------------------- number = 0 innum = 10 def __init__(self, config): #self.logFilePath() print 'tools class' @staticmethod def getStaticNumber(): Tools.number += 1 return Tools.number + Tools.innum #但是無法訪問:self.innum,即執行個體屬性 @classmethod def getClassNumber(cls): cls.number += 2 return cls.number #但是無法訪問:self.innum,即執行個體屬性 def getNumber(self): self.number += 3 return self.number if __name__ == '__main__': print Tools.getClassNumber() # 2 print Tools.getStaticNumber() # 13 tool = Tools(1) print 'object' print tool.number # 3 print tool.getNumber() # 6 執行個體的函數並不能改變靜態變數的值,但可以被靜態變數賦值,不過它被賦值的時刻只有該執行個體被建立 #print tool.getNumber() 和被以一次使用時被靜態變數賦值,而其他時候不被賦值 print tool.getStaticNumber() # 14 print tool.getClassNumber() # 6 print Tools.getClassNumber() # 8 print Tools.getStaticNumber() # 19 print Tools.getClassNumber() # 11 print 'object' print tool.number # 6 print tool.getNumber() # 9 tool = Tools(1) print tool.number # 11 #print tool.getNumber() print tool.getStaticNumber() # 22 print tool.getClassNumber() # 14 print Tools.getClassNumber() # 16 print Tools.getStaticNumber() # 27 print Tools.getClassNumber() # 19 print tool.number # 19 print tool.getNumber() # 22 print Tools.getClassNumber() # 21 print Tools.getStaticNumber() # 32 print Tools.getStaticNumber() # 33 print Tools.getClassNumber() # 25 print tool.number # 22 print tool.getNumber() # 25
總結:
1、執行個體的函數並不能改變靜態變數的值,但可以被靜態變數賦值,不過它被賦值的時刻只有該執行個體被建立和被以一次使用時被靜態變數賦值,而其他時候不被賦值;
2、對於靜態變數和類變數而言,其值不會受到執行個體的成員變數的影響(不會被其賦值),它們的值屬於類;
3、靜態方法和類方法都可以通過執行個體訪問,和使用類訪問的效果一樣,因為靜態方法和類方法不屬於某一個執行個體,但是屬於類;
4、靜態方法和類方法都不可以訪問執行個體的成員變數;
5、靜態成員變數的改變,相當於這個類的改變,當重新為這個類產生一個執行個體對象的時候,此時獲得的執行個體對象的變數就是此刻靜態成員變數的值;