简单分析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之wxPython菜单使用详解
Sep 28 Python
Python在线运行代码助手
Jul 15 Python
Python进行数据提取的方法总结
Aug 22 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
Jul 17 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
keras-siamese用自己的数据集实现详解
Jun 10 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
oracle资料库函式库
2006/10/09 PHP
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
JavaScript Chart 插件整理
2010/06/18 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
微信小程序入门教程
2016/11/18 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
Python实现新浪博客备份的方法
2016/04/27 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
python中模块的__all__属性详解
2017/10/26 Python
python3爬取数据至mysql的方法
2018/06/26 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
项目经理岗位职责
2013/11/11 职场文书
大学生简历的个人自我评价
2013/12/04 职场文书
留学推荐信怎么写
2014/01/25 职场文书
元旦获奖感言
2014/03/08 职场文书
房屋买卖协议样本
2014/11/16 职场文书
2014年大学生工作总结
2014/11/20 职场文书
2015年暑假工作总结
2015/07/13 职场文书