简单分析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实现正则检测密码合法性
Jan 05 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
python检测IP地址变化并触发事件
Dec 26 Python
VSCode Python开发环境配置的详细步骤
Feb 22 Python
Python地图绘制实操详解
Mar 04 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
让你的Python代码实现类型提示功能
Nov 19 Python
python取均匀不重复的随机数方式
Nov 27 Python
flask实现验证码并验证功能
Dec 05 Python
Python Pandas常用函数方法总结
Jun 15 Python
Python自动化工具之实现Excel转Markdown表格
Apr 08 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
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
javascript实现日历效果
2019/06/17 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
[03:40]DOTA2英雄梦之声_第01期_炼金术士
2014/06/23 DOTA
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
如何运行Python程序的方法
2013/04/21 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
Python实现八皇后问题示例代码
2018/12/09 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
Python中实现输入一个整数的案例
2020/05/03 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
女大学生毕业找工作的自我评价
2013/10/03 职场文书
劳动模范事迹材料
2014/01/19 职场文书
旅游活动总结
2014/08/27 职场文书
2015年公司工作总结
2015/04/25 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL