============================================================
在python的类中,类的属性有两种作用域:类变量,实例变量。
类似于java中的static变量与一般变量的区别。
类变量属于整个class所共享,而实例变量则仅仅属于特定对象实例。
类变量和实例变量在操作上的区别
-
访问权限
-
类变量通过类名点操作访问也可以通过实例点操作访问className.var objectName.var
-
实例变量只可以通过实例名点操作访问 objectName.var
-
类变量修改后的表现
-
通过className.var修改类变量,该类和所有实例所共享的数据将被修改,再次通过类或实例访问得到的将是新的数据。
-
通过objectName.var修改类变量,其效果将仅仅作用在该实例上,再次通过类或其它实例访问得到的仍然是旧的数据。但这一修改方式将对该类变量实例化,其结果是该实例将得到一个单独的该变量拷贝,此后此对象不再与类共享改名称的变量(实例化一说,是个人对这一现象的定义,还未找到权威描述)
附加测试代码如下
class classA:var1=0
def __init__(self,text):
self.var2=text #var2 is a instance variable
## self.var1=init_value #it will make var1 as a instance variable
def show(self):
print self.var1, self.var2
def set_var1(self, x):
self.var1=x
oa=classA('a')
ob=classA('b')
print '---init---'
oa.show()
ob.show()
print classA.var1, 'classA'
classA.var1=1
print '---after classA.var1=1---'
oa.show()
ob.show()
print classA.var1, 'classA'
oa.var1=2
print '---after oa.var1=2---'
oc=classA('c')
oa.show()
ob.show()
oc.show()
print classA.var1, 'classA'
oa.set_var1(3)
ob.set_var1(4)
print '---after oa.set_var1(3),ob.set_var1(4)---'
oa.show()
ob.show()
oc.show()
print classA.var1, 'classA'
classA.var1=5
print '---after classA.var1=5---'
oc=classA('c')
oa.show()
ob.show()
oc.show()
print classA.var1, 'classA'