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> 10

修改后访问类变量:A.class_var= 10

修改后访问实例变量 self.class_var= <__main__.a object at> 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】类变量、实例变量相关推荐

  1. 在python中、实例变量在类的内部通过_[宜配屋]听图阁

    1.类变量.实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量.通常不使用self.变量名赋值的变量.类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的. 实例变量 ...

  2. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感...

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  3. 【Python面试】 列举Python中的标准异常类?

    往期面试题: 说说Python变量.函数.类的命名规则? 说说Python可变与不可变数据类型? 说说Python面向对象三大特性? 说说Python中有几种数据类型? 说说Python模块主要分哪三 ...

  4. python中exception类的_面试题 | 列举几个Python中的标准异常类?

    [摘要]今天给大家解答一道Python常见的面试题,希望这个面试栏目,给那些准备面试的同学,提供一点点帮助!小编会从最基础的面试题开始,每天一题.如果参考答案不够好,或者有错误的话,麻烦大家可以在留言 ...

  5. python 概率分布函数_如何在Python中实现这五类强大的概率分布

    匿名用户 1级 2016-04-25 回答 首页 所有文章 观点与动态 基础知识 系列教程 实践项目 工具与框架应用 工具资源 伯乐在线 > Python - 伯乐在线 > 所有文章 &g ...

  6. python中所有的异常类都是谁的子类_Python中所有的异常类都是____的子类。

    [简答题]假设成年人的体重和身高存在此种关系: 身高(厘米)-100 =标准体重(千克) 如果一个人的体重与其标准体重的差值在正负5%之间,显示"体重正常",其他则显示" ...

  7. python字符串能减吗_在python中减去两个字符串(Subtract two strings in python)

    在python中减去两个字符串(Subtract two strings in python) 我应该计算两个不同列表的元素之间的差异. 这是我的代码: import operator a = ['5 ...

  8. python中继承和组合的区别_Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类...

    一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...

  9. python中的import语句的作用是什么_什么是Python import语句?在Python中的import语句作用有哪些?...

    Python import语句是用来导入模块的,在python模块库中有着大量的模块可供使用,import语句作用是把文件需要用的指定模块导入到当前程序中. import语句的作用 import语句作 ...

最新文章

  1. Linux运维系统工程师系列---16
  2. 教程 打造OS X Mavericks原版 EFI Clover 引导安装
  3. 两层卷积网络实现手写字母的识别(基于tensorflow)
  4. 日历对象导哪个包_微信新表情瞬间炸裂,文物表情包永恒萌呆!
  5. Linux学习笔记-编译与链接的过程
  6. CNN笔记:通俗理解卷积神经网络--理解不同输入通道和卷积核通道关系(红色部分)
  7. 软件工程 - 版本管理 - git 的基本实用方法 - 添加一个完整的项目目录的命令的细微差别
  8. 【技术解读】大赛TOP团队方案技巧大揭秘!
  9. sqlserver垮库查询_sql跨库查询(sqlserver跨库查询)
  10. 问题十六:使用初始化列表的构造函数和使用函数体的构造函数有什么区别?
  11. 构建插件式的应用程序框架(四)----服务容器(ZT)
  12. 《上古卷轴5重制版》支线任务
  13. 缓存框架 EhCache 使用 4
  14. 字节跳动变更集团LOGO 此前已正式更名为抖音集团
  15. canvas设置大小
  16. 【脚本】get_pixel(用PIL中自带的getpixel,得到单张图像或者某个文件夹中所有图像的P模式index)
  17. 浅析销售BOM实施方案及注意事项
  18. Navicat连接Linux的MySQL出错排查
  19. AD20常见的原理图报错和PCB设计规则
  20. python的延时绘图_我是如何用python+小程序实现延时摄影的

热门文章

  1. 清理 Bonjour mDNSResponder.exe 办法
  2. 【参赛作品16】openGauss SQL解析源码分析
  3. 16Gb/s FC今年将启动
  4. html显示ping值,网页实现ping效果
  5. dnf过年服务器维护否,DNF1月17日服务器维护到什么时候_几点能玩
  6. redis 学习(17) -- RDB
  7. 模拟面试具体过程与内容
  8. Python入门基础知识点 (初识函数)
  9. 游戏数值分层分段设计
  10. 《改变你一生的108个心理学法则》读书笔记