简单分析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实现的破解字符串找茬游戏算法示例
Sep 25 Python
django模板语法学习之include示例详解
Dec 17 Python
Python绘制二维曲线的日常应用详解
Dec 04 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
python已协程方式处理任务实现过程
Dec 27 Python
Python实现搜索算法的实例代码
Jan 02 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
如何理解Python中的变量
Jun 01 Python
Python字典dict常用方法函数实例
Nov 09 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 Python
Python如何利用pandas读取csv数据并绘图
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中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
js 深拷贝函数
2008/12/04 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
Python的设计模式编程入门指南
2015/04/02 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
Python实现壁纸下载与轮换
2020/10/19 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
社区综治工作汇报
2014/10/27 职场文书
员工自我工作评价
2015/03/06 职场文书
Python机器学习之基础概述
2021/05/19 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
Java 多线程并发FutureTask
2022/06/28 Java/Android