2009年12月15日星期二

python: Class and Object Variables 类变量 实例变量

原帖地址:http://hi.baidu.com/xionghy2008/blog/item/0cb862355e5b4b82a71e1256.html
============================================================

python的类中,类的属性有两种作用域:类变量,实例变量。

类似于java中的static变量与一般变量的区别。

类变量属于整个class所共享,而实例变量则仅仅属于特定对象实例。

类变量和实例变量在操作上的区别

  1. 访问权限

    • 类变量通过类名点操作访问也可以通过实例点操作访问className.var objectName.var

    • 实例变量只可以通过实例名点操作访问 objectName.var

  1. 类变量修改后的表现

    • 通过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'

没有评论:

发表评论

写下你的意见和问题,一起进步。谢谢