python新式类和经典类的区别实例分析


Posted in Python onMarch 23, 2020

本文实例讲述了python新式类和经典类的区别。分享给大家供大家参考,具体如下:

新式类就是  class person(object): 这种形式的, 从py2.2 开始出现的

新式类添加了:

__name__ is the attribute's name.
__doc__ is the attribute's docstring.
__get__(object) is a method that retrieves the attribute value from object.
__set__(object, value) sets the attribute on object to value.
__delete__(object, value) deletes the value attribute of object.

新式类的出现, 除了添加了大量方法以外, 还改变了经典类中一个多继承的bug, 因为其采用了广度优先的算法

Python 2.x中默认都是经典类,只有显式继承了object才是新式类
python 3.x中默认都是新式类,经典类被移除,不必显式的继承object

粘贴一段官网上的作者解释

python新式类和经典类的区别实例分析

是说经典类中如果都有save方法, C中重写了save() 方法,  那么寻找顺序是 D->B->A, 永远找不到C.save()

代码演示:

#!/usr/bin/env python3
#coding:utf-8
'''
  新式类和经典类的区别, 多继承代码演示

'''

class A:
  def __init__(self):
    print 'this is A'
  def save(self):
    print 'save method from A'

class B:
  def __init__(self):
    print 'this is B'

class C:
  def __init__(self):
    print 'this is c'
  def save(self):
    print 'save method from C'

class D(B, C):
  def __init__(self):
    print 'this is D'
d = D()
d.save()

结果显示

this is D
save method from C

注意: 在python3 以后的版本中, 默认使用了新式类, 是不会成功的

另外: 经典类中所有的特性都是可读可写的, 新式类中的特性只读的, 想要修改需要添加 @Texing.setter

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python 自动提交和抓取网页
Jul 13 Python
在Python中使用异步Socket编程性能测试
Jun 25 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Python实现Pig Latin小游戏实例代码
Feb 02 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
Python设计模式之外观模式实例详解
Jan 17 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
python词云库wordcloud的使用方法与实例详解
Feb 17 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 Python
Python count函数使用方法实例解析
Mar 23 #Python
使用python实现飞机大战游戏
Mar 23 #Python
如何在Django中使用聚合的实现示例
Mar 23 #Python
python3注册全局热键的实现
Mar 22 #Python
浅谈Python线程的同步互斥与死锁
Mar 22 #Python
Django 项目布局方法(值得推荐)
Mar 22 #Python
python实现吃苹果小游戏
Mar 21 #Python
You might like
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
vue实现评论列表功能
2019/10/25 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
基于python实现聊天室程序
2018/07/27 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
python super函数使用方法详解
2020/02/14 Python
快速创建python 虚拟环境
2020/11/28 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
简历的自我评价范文
2014/02/04 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
体育口号大全
2014/06/18 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
网络营销计划书
2015/01/17 职场文书
政审证明范文
2015/06/19 职场文书
新年寄语2016
2015/08/17 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
如何用python反转图片,视频
2021/04/24 Python
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android