http://hi.baidu.com/xionghy2008/blog/item/0cb862355e5b4b82a71e1256.html
在python的类中,类的属性有两种作用域:类变量,实例变量。
类似于java和c++中的static变量与一般变量的区别。类变量属于整个class所共享,而实例变量则仅仅属于特定对象实例。
类变量和实例变量在操作上的区别
1. 访问权限
类变量通过类名点操作访问也可以通过实例点操作访问className.varobjectName.var
实例变量只可以通过实例名点操作访问objectName.var
2. 类变量修改后的表现
通过className.var修改类变量,该类和所有实例所共享的数据将被修改,再次通过类或实例访问得到的将是新的数据。
通过objectName.var修改类变量,其效果将仅仅作用在该实例上,再次通过类或其它实例访问得到的仍然是旧的数据。但这一修改方式将对该类变量实例化,其结果是该实例将得到一个单独的该变量拷贝,此后此对象不再与类共享该名称的变量(实例化一说,是个人对这一现象的定义,还未找到权威描述)
#coding=gbk
class classA:
#classvar=''
def __init__(self):
pass
def set_var1(self,x):
classA.classvar=x
return classA.classvar
def set_var2(self,y):
self.var2=y
return self.var2
oa=classA()
ob=classA()
oa.set_var1("class variable")
print oa.classvar
print ob.classvar
oa.classvar="changed" #classvar对oa实例已经不是类变量了
print oa.classvar
print ob.classvar
oa.set_var1("class variable01")
print oa.classvar
print ob.classvar
ob.set_var1("class variable02")
print oa.classvar
print ob.classvar
ob.set_var2("inst variable")
print ob.var2
print oa.var2 #error! because var2 is a instance variable