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 相关文章推荐
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
wxPython实现窗口用图片做背景
Apr 25 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
python 实现在一张图中绘制一个小的子图方法
Jul 07 Python
python多进程间通信代码实例
Sep 30 Python
Python基于WordCloud制作词云图
Nov 29 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
python实现udp聊天窗口
Mar 31 Python
Python 存取npy格式数据实例
Jul 01 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 删除cookie和浏览器重定向
2009/03/16 PHP
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
2013/12/30 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
python基础教程之自定义函数介绍
2014/08/29 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
介绍一下Python下range()函数的用法
2013/11/07 面试题
小学生暑假感言
2014/02/06 职场文书
群众路线个人整改方案
2014/10/25 职场文书
司考复习计划
2015/01/19 职场文书
城管年度个人总结
2015/02/28 职场文书
2015年班组长工作总结
2015/04/10 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
vue特效之翻牌动画
2022/04/20 Vue.js