简单分析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 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
python中OrderedDict的使用方法详解
May 05 Python
python版飞机大战代码分享
Nov 20 Python
Python 3.x基于Xml数据的Http请求方法
Dec 28 Python
Python3.7 dataclass使用指南小结
Feb 22 Python
解决Python二维数组赋值问题
Nov 28 Python
Python基于当前时间批量创建文件
May 07 Python
win10从零安装配置pytorch全过程图文详解
May 08 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
Python实现打包成库供别的模块调用
Jul 13 Python
Python程序慢的重要原因
Sep 04 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
PHP中动态显示签名和ip原理
2007/03/28 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
Dojo 学习要点
2010/09/03 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
python基于queue和threading实现多线程下载实例
2014/10/08 Python
深入学习Python中的装饰器使用
2016/06/20 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
python 实现表情识别
2020/11/21 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
挪威手表购物网站:Klokker
2016/09/19 全球购物
全球度假村:Club Med
2017/11/27 全球购物
Cocopanda波兰:购买化妆品、护肤品、护发和香水
2020/05/25 全球购物
施工安全汇报材料
2014/08/17 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
物流业务员岗位职责
2015/04/03 职场文书
圣诞晚会主持词
2015/07/01 职场文书
月考总结与反思
2015/10/22 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python
正则表达式基础与常用验证表达式
2022/06/16 Javascript