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 logging模块学习笔记
May 24 Python
python妙用之编码的转换详解
Apr 21 Python
python实现决策树
Dec 21 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
Python中应该使用%还是format来格式化字符串
Sep 25 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
python实现趣味图片字符化
Apr 30 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
Django中的session用法详解
Mar 09 Python
Python2 与Python3的版本区别实例分析
Mar 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
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
python去掉空白行的多种实现代码
2018/03/19 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
科技之星事迹材料
2014/06/02 职场文书
班级团队活动方案
2014/08/14 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
vue elementUI批量上传文件
2022/04/26 Vue.js
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS