简单分析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 获取文件列表(或是目录例表)
Mar 25 Python
python使用PyV8执行javascript代码示例分享
Dec 04 Python
python命令行参数解析OptionParser类用法实例
Oct 09 Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
django 环境变量配置过程详解
Aug 06 Python
Python 2种方法求某个范围内的所有素数(质数)
Jan 31 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
python实现简单聊天功能
Jul 07 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 fsockopen解决办法 php实现多线程
2014/01/20 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
又一个小巧的图片预加载类
2007/05/05 Javascript
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
javascript 类方法定义还是有点区别
2009/04/15 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
Python不规范的日期字符串处理类
2014/06/10 Python
python获取图片颜色信息的方法
2015/03/18 Python
Python装饰器用法示例小结
2018/02/11 Python
Python OpenCV获取视频的方法
2018/02/28 Python
windows下python安装pip图文教程
2018/05/25 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
2015年母亲节活动策划方案
2015/05/04 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
学校运动会通讯稿
2015/07/18 职场文书
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle