Python的类变量和实例变量

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



 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值