简单分析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脚本在Appium库上对移动应用实现自动化测试
Apr 17 Python
python获取文件扩展名的方法
Jul 06 Python
python opencv之SIFT算法示例
Feb 24 Python
python实现一个简单的ping工具方法
Jan 31 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
python能做哪方面的工作
Jun 15 Python
基于python实现操作redis及消息队列
Aug 27 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
浅析python函数式编程
Sep 26 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 while循环得到循环次数
2013/10/26 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
JavaScript基础知识之数据类型
2012/08/06 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
2020/08/22 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
玩转python爬虫之正则表达式
2016/02/17 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
业务主管岗位职责范本
2013/12/25 职场文书
交通事故协议书
2014/04/15 职场文书
白血病捐款倡议书
2014/05/14 职场文书
关于保护环境的标语
2014/06/09 职场文书
2015团员个人年度总结
2015/11/24 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL