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使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
在Python中使用HTML模版的教程
Apr 29 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
Python读写压缩文件的方法
Jul 30 Python
详解python 内存优化
Aug 17 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 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
第十节--抽象方法和抽象类
2006/11/16 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
js密码强度校验
2015/11/10 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
windows系统下Python环境搭建教程
2017/03/28 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
python实现大文本文件分割
2019/07/22 Python
django使用admin站点上传图片的实例
2019/07/28 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
最小二乘法及其python实现详解
2020/02/24 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
决定成败的关键——创业计划书
2014/01/24 职场文书
梅花魂教学反思
2014/04/25 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
工厂无线对讲系统解决方案
2022/02/18 无线电
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技