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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
python获得图片base64编码示例
Jan 16 Python
Python实现从订阅源下载图片的方法
Mar 11 Python
Python学习思维导图(必看篇)
Jun 26 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
Python异常的检测和处理方法
Oct 26 Python
python将list转为matrix的方法
Dec 12 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
Python嵌入C/C++进行开发详解
Jun 09 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修改Linux或Unix口令的方法分享
2012/01/30 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
分享php邮件管理器源码
2016/01/06 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
python创建和使用字典实例详解
2013/11/01 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
Python 递归函数详解及实例
2016/12/27 Python
利用Python检测URL状态
2019/07/31 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
zooplus意大利:在线宠物商店
2019/08/07 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
.net笔试题
2014/03/03 面试题
技术人员面试提纲
2013/11/28 职场文书
求职自荐信
2013/12/14 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
保护环境倡议书范文
2014/05/13 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
2015元旦节寄语
2014/12/08 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
Java基础——Map集合
2022/04/01 Java/Android