先上代码吧。
# -*- 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、静态成员变量的改变,相当于这个类的改变,当重新为这个类生成一个实例对象的时候,此时获得的实例对象的变量就是此刻静态成员变量的值;