首先了解一下什么是经典类,什么是新式类
class Person: #经典类
pass
class Person2(object): #新式类
pass
#类名首字母都大写
#在python3里面经典类和新式类没有任何区别
经典类与新式类在python3中是没有任何区别的,主要区别是在python2中多继承的时候。
区别:
经典类是:深度优先
新式类是:广度优先
在python3里面都是广度优先
下面我们举例子来说明:
class A:   #这样定义A是经典类
def x(self):
print('A')
class B(A):
# def x(self):
# print('B')
pass
class C(A):
def x(self):
print('C') class D(B,C):
pass
s = D()
s.x()
class A(object):   #这样定义A是新式类
def x(self):
print('A')
class B(A):
# def x(self):
# print('B')
pass
class C(A):
def x(self):
print('C') class D(B,C):
pass
s = D()
s.x()

以下分析情况都是基于python2

1.这样定义A类,A是经典类,那么在继承后D调用x()方法的时候顺序是怎样的呢?

首先是从B类里面去找x()方法,如果B类中没有,就会从A类里面去找,如果A类中也没有x()方法,最后才会从C类里面去找;

2.那么如果A类定义的时候是新式类,那么在继承后D调用x()方法的时候顺序是怎样的呢?

首先是从B类里面去找x()方法,如果B类中没有,就会从C类里面去找,如果C类中也没有x()方法,最后才会从A类里面去找;

画个比较丑的图更直观的说明一下:


最新文章

  1. POJ 3714 Raid
  2. TStringList 常用操作
  3. 一个超复杂的间接递归——C语言初学者代码中的常见错误与瑕疵(6)
  4. Mysql的一些小知识点
  5. CSS3 transform的skew属性值图文详解
  6. jquery json遍历和动态绑定事件
  7. 在IT学习中的“认识论”
  8. Coursera《machine learning》--(14)数据降维
  9. Dynamic Web Module 3.0 requires Java 1.6 or newer报错
  10. linux 配置 mail server
  11. 前端之bootstrap模态框
  12. 模块化jQuery的方法
  13. python基础学习(三)变量和类型
  14. mysql执行 sql文件遇到USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8错误
  15. C# 的AOP实现
  16. winSockets编程(五)非阻塞模式(远程算数程序)
  17. 2018-04-11 activity周期
  18. Kubernetes1.91(K8s)安装部署过程(三)--创建高可用etcd集群
  19. php 删除目录
  20. 利用GitHub Pages和Hexo搭建个人博客

热门文章

  1. httpoxy 漏洞预警及修复方案
  2. sql 使用整理
  3. JS关于浏览器尺寸的方法
  4. jQuery 插件开发指南
  5. requirejs源码分析,使用注意要点
  6. OSG四元数与欧拉角之间的转换
  7. 自定义VIew方法
  8. 递归删除资源树 Ztree
  9. 【BZOJ1412】[ZJOI2009]狼和羊的故事 最小割
  10. 获取ScrollView的onScrollListener