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爬虫功能
Dec 31 Python
Python简单格式化时间的方法【strftime函数】
Sep 18 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
pycharm 配置远程解释器的方法
Oct 28 Python
Python for循环与range函数的使用详解
Mar 23 Python
Python3 批量扫描端口的例子
Jul 25 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
Python基础之列表常见操作经典实例详解
Feb 26 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 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
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
跟老齐学Python之用Python计算
2014/09/12 Python
window下eclipse安装python插件教程
2017/04/24 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
Python @property装饰器原理解析
2020/01/22 Python
Python @property及getter setter原理详解
2020/03/31 Python
详解python metaclass(元类)
2020/08/13 Python
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
毕业生自荐书
2014/02/03 职场文书
车辆工程专业求职信
2014/06/14 职场文书
个人四风对照检查材料
2014/09/26 职场文书
买房子个人收入证明
2014/10/12 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python
python利用while求100内的整数和方式
2021/11/07 Python
JavaScript前端面试组合函数
2022/06/21 Javascript