Python小白不正确的使用类变量实例


Posted in Python onMay 29, 2020

不正确的使用类变量

看下面一个例子:

>>> class A(object):
...   x = 1
...
>>> class B(A):
...   pass
...
>>> class C(A):
...   pass
...
>>> print A.x, B.x, C.x
1 1 1

看起来没有问题。

>>> B.x = 2
>>> print A.x, B.x, C.x
1 2 1

嗯哈,还是和预想的一样

>>> A.x = 3
>>> print A.x, B.x, C.x
3 2 3

我了个去。只是改变了A.x,为啥C.x也变了?

在Python里,类变量通常在内部被当做字典来处理并遵循通常所说的方法解析顺序(Method Resolution Order (MRO))。因此在上面的代码中,因为属性x在类C中找不到,因此它会往上去它的基类中查找(在上面的例子中只有A这个类,当然Python是支持多重继承(multiple inheritance)的)。换句话说,C没有它自己独立于A的属性x。因此对C.x的引用实际上是对A.x的引用。(B.x不是对A.x的引用是因为在第二步里B.x=2将B.x引用到了2这个对象上,倘若没有如此,B.x仍然是引用到A.x上的。)

知识点补充:

类变量、实例变量概念

类变量:

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

实例变量:

实例变量是定义在方法中的变量,使用self绑定到实例上的变量,只是对当前实例起作用。

以上就是Python小白不正确的使用类变量实例的详细内容,更多关于Python新手不正确的使用类变量的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python回调函数的使用方法
Jan 23 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
Python定时器实例代码
Nov 01 Python
快速了解Python相对导入
Jan 12 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
python实现隐马尔科夫模型HMM
Mar 25 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 Python
python实现简单加密解密机制
Mar 19 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 Python
python小白切忌乱用表达式
May 29 #Python
Python爬虫实现百度翻译功能过程详解
May 29 #Python
Django中的模型类设计及展示示例详解
May 29 #Python
如何理解Python中包的引入
May 29 #Python
浅谈django channels 路由误导
May 28 #Python
Python如何实现FTP功能
May 28 #Python
python基于socket函数实现端口扫描
May 28 #Python
You might like
php学习笔记 数组的常用函数
2011/06/13 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
修复ie8&chrome下window的resize事件多次执行
2011/10/20 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
Django中间件实现拦截器的方法
2018/06/01 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
Pycharm调试程序技巧小结
2020/08/08 Python
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
女大学生毕业找工作的自我评价
2013/10/03 职场文书
求职信范文大全
2014/05/26 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
多媒体教室标语
2014/06/26 职场文书
党支部考察意见范文
2015/06/02 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL