简单分析python的类变量、实例变量


Posted in Python onAugust 23, 2019

1、类变量、实例变量概念

类变量:

类变量就是定义在类中,但是在函数体之外的变量。通常不使用self.变量名赋值的变量。类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的。

实例变量:

实例变量是定义在方法中的变量,使用self绑定到实例上的变量,只是对当前实例起作用。

2、访问

类变量

在类的内部和外部类变量都可以直接使用className.类变量的形式访问。但是在类的内部,也可以使用self.类变量来访问,但是这个是用含义就不同了(后面使用代码验证)。

实例变量

在类的内部,实例变量self.实例变量的形式访问;在类的外部使用对象名。实例变量的形式访问。实例变量是绑定到一个实例上的变量,它只是属于这个绑定的实力。而区别类变量的就是类变量是所有的来自用一个类的实例所共享。我们看到这里会有这样的疑问!

如果说类变量对所有来自这个类的所有实例所共享,那么假如我一个实例去改变了这个类变量(假设使用这样的操作object.类变量 = value)的值,那么对于其他的实例是不是都是可见的?

答案是否定的,下面验证。

class A(object):
  # 定义一个类变量,初值是10
  class_var = 10
  print id(class_var)
  def foo(self):
  print '在类中访问类变量:A.class_var=', A.class_var
  print '在类中访问实例变量: self.class_var=', self, self.class_var
 
  # 改变实例变量的值
  self.class_var = 40
  print '修改后访问类变量:A.class_var=', A.class_var
  print '修改后访问实例变量 self.class_var=',self, self.class_var
 
  # 这里的class_var和函数外面的class_var不是同一个东西,这是一个局部变量
  class_var = 20
  print id(class_var)
  print 'class_var=', class_var
 
     
  A.class_var = 15
  print 'A.class_var=', A.class_var
  print 'class_var=',class_var
  print 'self.class_var=',self.class_var
     
 
obj1 = A()
obj2 = A()
obj3 = A()
obj1.foo()
print A.class_var
print obj1.class_var
print obj2.class_var
print obj3.class_var

Output:

49964144
在类中访问类变量:A.class_var= 10
在类中访问实例变量: self.class_var= <__main__.A object at 0x0000000002FD2390> 10
修改后访问类变量:A.class_var= 10
修改后访问实例变量 self.class_var= <__main__.A object at 0x0000000002FD2390> 40
49963904
class_var= 20
A.class_var= 15
class_var= 20
self.class_var= 40
15
40
15
15

从上面运行的结果分析:当使用self.class_var形式访问类变量的之后,如果修改self.class_var的值,可以发现,类变量的值没有变化;不放心我们在修改类变量的值,发现self.class_var的值也没有受到影响。

从最后打印obj2和obj3这两个都来自于一个类的实例中的类变量都是和修改后的类变量一样,表示他们是共享类变量的。

3、总结

1、类变量可以使用className.类变量和self.类变量两种方式访问。
2、如果使用self.类变量的方式访问并重新赋值后,这个变量就会成为实例变量和self绑定,实际上就变成了一个实例变量,实例变量会屏蔽掉类变量的值。
3、类变量是共享的,最好使用类名的方式来访问类变量。
4、类变量通过sel访问时,就会被转化成实力变量,被绑定到特定的实例上。
5、实例变量(self)的形式对类变量重新赋值后,类变量的值不会随之变化。
6、实例变量对每一个对象是不可见的,每一个对象拥有着可能不同的值。

以上我们整理的知识点希望能够帮助到大家,感谢大家对三水点靠木的支持。

Python 相关文章推荐
Python实现向QQ群成员自动发邮件的方法
Nov 19 Python
八大排序算法的Python实现
Jan 28 Python
Python数组定义方法
Apr 13 Python
python编程培训 python培训靠谱吗
Jan 17 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
May 04 Python
pandas中read_csv的缺失值处理方式
Dec 19 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
Jan 14 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
了解一下python内建模块collections
Sep 07 Python
django使用channels实现通信的示例
Oct 19 Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 #Python
python-Web-flask-视图内容和模板知识点西宁街
Aug 23 #Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 #Python
python3 selenium自动化 下拉框定位的例子
Aug 23 #Python
python Web flask 视图内容和模板实现代码
Aug 23 #Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 #Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 #Python
You might like
php实现的简单多进程服务器类完整示例
2020/02/01 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
python的id()函数解密过程
2012/12/25 Python
简单介绍Ruby中的CGI编程
2015/04/10 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Python 支付整合开发包的实现
2019/01/23 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
生物技术专业毕业生求职信范文
2013/12/14 职场文书
小班评语大全
2014/05/04 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
如何拟写通知正文?
2019/04/02 职场文书
导游词之上海豫园
2019/10/24 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
MySQL派生表联表查询实战过程
2022/03/20 MySQL