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实现多线程采集的2个代码例子
Jul 07 Python
Python实现向QQ群成员自动发邮件的方法
Nov 19 Python
Python函数可变参数定义及其参数传递方式实例详解
May 25 Python
Python工程师面试题 与Python Web相关
Jan 14 Python
解决python爬虫中有中文的url问题
May 11 Python
Python装饰器的执行过程实例分析
Jun 04 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
Python简单获取二维数组行列数的方法示例
Dec 21 Python
通过实例学习Python Excel操作
Jan 06 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
python pymysql库的常用操作
Oct 16 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
Terran热键控制
2020/03/14 星际争霸
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
非常实用的php验证码类
2016/05/15 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
javascript中的隐式调用
2018/02/10 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
python获取文件扩展名的方法
2015/07/06 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
python 解压pkl文件的方法
2018/10/25 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
简单了解python反射机制的一些知识
2019/07/13 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
一套VC试题
2015/01/23 面试题
C# .NET面试题
2015/11/28 面试题
公司营业员的工作总结自我评价
2013/10/05 职场文书
反腐倡廉标语
2014/06/24 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python