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通过递归遍历出集合中所有元素的方法
Feb 25 Python
详解Python装饰器由浅入深
Dec 09 Python
Python 基础教程之str和repr的详解
Aug 20 Python
Python列表元素常见操作简单示例
Oct 25 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
用python实现一个简单的验证码
Dec 09 Python
解决hive中导入text文件遇到的坑
Apr 07 Python
Python机器学习之PCA降维算法详解
May 19 Python
教你使用TensorFlow2识别验证码
Jun 11 Python
Python数据处理的三个实用技巧分享
Apr 01 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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/10/09 PHP
用PHP调用Oracle存储过程
2006/10/09 PHP
一个高ai的分页函数和一个url函数
2006/10/09 PHP
php中设置多级目录session的问题
2011/08/08 PHP
php中的strpos使用示例
2014/02/27 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
javascript 函数调用规则
2009/08/26 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
求职简历自荐信范文
2013/10/21 职场文书
办公室经理岗位职责
2014/01/01 职场文书
关于毕业的广播稿
2014/01/10 职场文书
思想品德自我评价
2014/02/04 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
老干部工作汇报材料
2014/10/28 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
九华山导游词
2015/02/03 职场文书
推广普通话的宣传语
2015/07/13 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技