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实现partial改变方法默认参数
Aug 18 Python
Python中的pprint折腾记
Jan 21 Python
Python中的defaultdict模块和namedtuple模块的简单入门指南
Apr 01 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python引用模块和查找模块路径
Mar 17 Python
python 调用HBase的简单实例
Dec 18 Python
解决Django的request.POST获取不到内容的问题
May 28 Python
简单了解Django应用app及分布式路由
Jul 24 Python
python pandas cumsum求累计次数的用法
Jul 29 Python
Python中pymysql 模块的使用详解
Aug 12 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
Python计算指定日期是今年的第几天(三种方法)
Mar 26 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排序算法的复习和总结
2012/02/15 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
Python中的并发编程实例
2014/07/07 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
Python中几个比较常见的名词解释
2015/07/04 Python
在类Unix系统上开始Python3编程入门
2015/08/20 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
python 杀死自身进程的实现方法
2019/07/01 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
Django websocket原理及功能实现代码
2020/11/14 Python
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
电话客服工作职责
2014/07/27 职场文书
公务员个人考察材料
2014/12/23 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
php将xml转化对象的实例详解
2021/11/17 PHP