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 错误和异常小结
Oct 09 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
python调用摄像头显示图像的实例
Aug 03 Python
浅谈django的render函数的参数问题
Oct 16 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
python为QT程序添加图标的方法详解
Mar 09 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
Python 忽略文件名编码的方法
Aug 01 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 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
PHP文本操作类
2006/11/25 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
浅析js封装和作用域
2013/07/09 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
三种取消选中单选框radio的方法
2014/09/09 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
pip install urllib2不能安装的解决方法
2018/06/12 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
详解如何修改python中字典的键和值
2020/09/29 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
2021/01/09 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
会计实习期自我鉴定
2013/10/06 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
环保倡议书怎么写
2014/05/16 职场文书
三八活动策划方案
2014/08/17 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
交通安全教育主题班会
2015/08/12 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js