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实现给qq邮箱发送邮件的方法
May 28 Python
Python在Console下显示文本进度条的方法
Feb 14 Python
使用Python从有道词典网页获取单词翻译
Jul 03 Python
python使用super()出现错误解决办法
Aug 14 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
深入理解Python3 内置函数大全
Nov 23 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
Python中创建二维数组
Oct 17 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
Python设计模式之代理模式实例详解
Jan 19 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 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 nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
python解析模块(ConfigParser)使用方法
2013/12/10 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
python内置数据类型之列表操作
2018/11/12 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
美国温暖商店:The Warming Store
2018/12/15 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
为什么要使用servlet
2016/01/17 面试题
经典婚礼主持词
2014/03/13 职场文书
家属答谢词
2015/01/05 职场文书
JavaScript 反射学习技巧
2021/10/16 Javascript