python中的类分为新式类和经典类,具体有什么区别呢?简单的说,

1.新式类都从object继承,经典类不需要。

  • Python 2.x中默认都是经典类,只有显式继承了object才是新式类

  • Python 3.x中默认都是新式类,不必显式的继承object

2.经典类继承深度优先,新式类继承广度优先。

在多重继承关系下,子类的实例对象想要调用父类的方法,向上寻找时的顺序。

3.新式类相同父类只执行一次构造函数,经典类重复执行多次。

class A:def __init__(self):print 'a',
class B(A):def __init__(self):A().__init__()print 'b',
class C(A):def __init__(self):A().__init__()print 'c',
class D(B,C):def __init__(self):B().__init__()C().__init__()print 'd',class E(D,A):def __init__(self):D().__init__()A().__init__()print  'e',
d=D()
print ''
e=E()

代码执行后打印如下:

a a b a a b a a c a a c d
a a b a a b a a c a a c d a a b a a b a a c a a c d a a e

第一行应该按如下分组a a b 、a a b |a a c 、a a c| d。首先执行D的init函数,D的init包含B和C的init,都执行之后才会执行print d,至于为什么显示执行了两次构造函数,这个取决于类内部的call方法,之后介绍。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class A(object):def __init__(self):print 'a',
class B(A):def __init__(self):super(B,self).__init__()print 'b',
class C(A):def __init__(self):super(C,self).__init__()print 'c',
class D(B,C):def __init__(self):super(D,self).__init__()print 'd',
class E(D,A):def __init__(self):super(E,self).__init__()print  'e',
d=D()
print ''
e=E()

结果打印如下:

a c b d
a c b d e

python中新式类和经典类相关推荐

  1. python中的__new__与__init__,新式类和经典类(2.x)

    在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...

  2. python新式类和经典类区别_Python中新式类和经典类的区别,钻石继承

    1)首先,写法不一样: class A: pass class B(object): 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索. 3)新式类更符合OOP编程思想,统一了pyt ...

  3. python中新式类和经典类的区别

    1.新式类和经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于"新式类",都会获得所有"新式类"的 ...

  4. python单例模式控制成只初始化一次,常规型的python单例模式在新式类和经典类中的区别。...

    单例模式的写法非常多,但常规型的单例模式就是这样写的,各种代码可能略有差异,但核心就是要搞清楚类属性 实例属性,就很容易写出来,原理完全一模一样. 如下: 源码: class A(object):de ...

  5. python经典类新式类_Python新式类与经典类(旧式类)的区别

    看写poc的时候看到的,思考了半天,现在解决了 转载自http://blog.csdn.net/zimou5581/article/details/53053775 Python中类分两种:旧式类和新 ...

  6. Python新式类与经典类(旧式类)的区别

    看写poc的时候看到的,思考了半天,现在解决了 转载自http://blog.csdn.net/zimou5581/article/details/53053775 Python中类分两种:旧式类和新 ...

  7. python3新式类_Python中新式类与经典类的区别详析

    1.新式类与经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于"新式类",都会获得所有"新式类"的 ...

  8. python经典类新式类_Python的新式类和经典类

    1. 前言 python在2.2版本中引入了descriptor功能,也正是基于这个功能实现了新式类(new-styel class)的对象模型, 同时解决了之前版本中经典类(classic clas ...

  9. python 新式类 旧式类_Python新式类与经典类(旧式类)的区别

    Python中类分两种:旧式类和新式类: ➤新式类都从object继承,经典类不需要. ➤新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而 ...

最新文章

  1. SAP freelancer接SAP项目应有底线思维
  2. Excel制作带勾的方框
  3. 论文浅尝 \ 联合知识图谱实例和本体概念的通用表示学习
  4. KNN算法——分类部分
  5. Java终结符_从零开始写个编译器吧 - TerminalSymbol.java 与 NonTerminalSymbol.java
  6. [LeetCode]Link List Cycle
  7. 兼容ie10以下版本的placeholder属性
  8. hive中的高阶函数:with cube函数,Grouping sets函数,With rollup函数
  9. 谷歌浏览器设置护眼模式,全黑主题
  10. MyBatis—引入外部配置文件(properties)
  11. 阿里云国际站代充值个人注册与分销商邀约区别
  12. 职场学习、员工管理-怎样做企业最受欢迎的员工
  13. html 微信登陆,登录包含微信登录.html
  14. 血清CEA、HE4、CA199、CA153、CA125水平联合检测在妇科恶性肿瘤诊断中的临床意义
  15. 投资者选择量化基金的四个指标
  16. php登录后不点击注销,icloud无密码强制注销的方法
  17. win10系统打不开计算机管理,win10计算机管理打不开如何办
  18. MySQL数据盘空间满了
  19. 本科计算机考研地信,作为一个已经毕业一年的地信专业学生的肺腑之言
  20. Semantic Versioning

热门文章

  1. 你不能错过这些美食!
  2. DelphiXE7中创建WebService(服务端+客户端)
  3. PHPExcel常用方法汇总
  4. Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增对并行任务库(TPL)的支持
  5. boost log 能不能循环覆盖_如何在 JS 循环中正确使用 async 与 await
  6. 通过PDF无纸化测试SAP SmartForm打印效果
  7. SAP 外币金额 汇率 转换
  8. 成本费用跨年取得发票的财务、税务处理
  9. SAP销售发票同步产生会计凭证的两种做法
  10. POPUP_TO_CONFIRM