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中用箱线图分析异常值_[宜配屋]听图阁

    前言 异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值.常用检测方法3σ原则和箱型图.其中,3σ原则只适用服从正态分布的数据.在3σ原则下,异常值被定义为观察值和平均值的偏差超过3倍 ...

  2. python中字典按键或键值排序_[宜配屋]听图阁

    字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排 ...

  3. python上下文管理关键字_[宜配屋]听图阁

    前言 如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 "with" 关键字的语句,它通常用在什么场景呢?今天就来说说 with 和 上下文管理器. 对于系统资源如文件 ...

  4. python 判断节假日_[宜配屋]听图阁

    不废话,直接上代码Python3.6 签到代码,只需修改url,账号,密码即可,此处是登录时无验证登录,有验证码的自行补充 # -*- coding:utf-8 -*- import json imp ...

  5. python连接oracle详细教程_[宜配屋]听图阁

    1. 连接对象 操作数据库之前,首先要建立数据库连接. 有下面几个方法进行连接. >>>import cx_Oracle >>>db = cx_Oracle.con ...

  6. python运行结果图_[宜配屋]听图阁

    首先使用内置模块os. >>> import os >>> code = os.system("pwd && sleep 2") ...

  7. python做excel表格代码_[宜配屋]听图阁

    安装两个库:pip install xlrd.pip install xlwt 1.python读excel--xlrd 2.python写excel--xlwt 1.读excel数据,包括日期等数据 ...

  8. python调用百度地图画轨迹图_[宜配屋]听图阁

    如题,先上效果图: 主要分为两大步骤 使用python语句,通过百度地图API,对已知的地名抓取经纬度 使用百度地图API官网的html例程,修改数据部分,实现呈现效果 一.使用python语句,通过 ...

  9. python图片横向合并_[宜配屋]听图阁

    起因: 有一批数据需要每个月进行分析,数据存储在excel中,行标题一致,需要横向合并进行分析. 数据示意: 具有多个 代码: # -*- coding: utf-8 -*- "" ...

最新文章

  1. vs2008 常用快捷键
  2. Matplotlib绘图双纵坐标轴设置及控制设置时间格式
  3. ICLR 2020 | “同步平均教学”框架为无监督学习提供更鲁棒的伪标签
  4. Java方法 signature
  5. 玩转oracle 11g(45):关系数据库
  6. 【git】git compare with branch 一样的代码 但是却标识不一样 成块显示 Git 比较 不准确
  7. POST+JSON+JS下载Excel或CSV
  8. Chart控件X轴显示不全的解决方法
  9. OpenCV精进之路(八):图像轮廓和图像分割修复——轮廓查询和多边形包围轮廓
  10. 软件测试颗粒度,测试用例粒度粗细的划分
  11. 【CV学习笔记】图像的计算
  12. c语言 输入一个字符串 把其中的字符按逆序输出,输入一个字符串,把其中的字符按逆序输出。 C++...
  13. 北大中文期刊目录_很遗憾!你看到的“最新版核心期刊目录”又又又是错的!...
  14. Abaqus: 云图设置
  15. java 随机生成人员姓名
  16. Java将Word/Excel转换成PDF—aspose工具
  17. 000-EMC 深入解读-目录
  18. H264 概念之 I P B 帧
  19. 随身计算机的硬盘是该换了,手提电脑硬盘可以换吗
  20. Mysql出现 “ERROR 1062” 的解决方法

热门文章

  1. 【渝粤教育】国家开放大学2018年秋季 0222-22T模拟电子电路 参考试题
  2. 【渝粤教育】国家开放大学2018年春季 0177-21T电机学(二) 参考试题
  3. 【渝粤题库】国家开放大学2021春2238个案工作题目
  4. 433M无线串口E30-TTL-100在农业物联网上的应用
  5. ZigBee网络角色 拓扑结构 无线模块组网典型应用
  6. Java面向对象(20)--接口
  7. 计算机二级web题目(7.2)--基本操作题1
  8. 天玑机器人颈椎_天玑骨科手术机器人亮相机器人大会 误差不到1毫米
  9. nginx访问目录是没加/的重定向控制
  10. @RequestMapping