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实现备份文件实例
Sep 16 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
浅谈flask中的before_request与after_request
Jan 20 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
Python使用combinations实现排列组合的方法
Nov 13 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
python tkinter组件摆放方式详解
Sep 16 Python
Python笔记之facade模式
Nov 20 Python
使用Python进行防病毒免杀解析
Dec 13 Python
Python hmac模块使用实例解析
Dec 24 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
浅析Python中字符串的intern机制
Oct 03 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中SESSION反序列化机制
2017/03/01 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
PHP实现倒计时功能
2020/11/16 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
使用隐藏的new来创建对象
2011/03/29 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
JavaScript类的继承多种实现方法
2020/05/30 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python中replace方法实例分析
2014/08/20 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
Python 没有main函数的原因
2020/07/10 Python
python接入支付宝的实例操作
2020/07/20 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
关于Python错误重试方法总结
2021/01/03 Python
自我鉴定范文200字
2013/10/02 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
学校募捐倡议书
2014/05/14 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
简易版租房协议书范本
2014/10/13 职场文书
团代会闭幕词
2015/01/28 职场文书
美术教师个人总结
2015/02/06 职场文书
办公室卫生管理制度
2015/08/04 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android