继承知识点补充

在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类。

一、多继承

之前我们都是讲的单继承,那么什么是多继承呢?说白了,就是:子类可以继承多个父类,就叫多继承。

class SchoolMember(object):  #SchoolMember类
'''学校成员基类'''
def tell(self):
print("the schoolmeber is tell...") class School(object): #School类
"""学校类"""
def open_branch(self,addr):
print("openning a new branch in",addr) class Teacher(SchoolMember,School): #子类Teacher同时继承了SchoolMember,School两个类
"讲师类"
def teaching(self):
"讲课方法"
print("Teacher xiaogao is teaching python") t1 = Teacher()
t1.tell() #拥有父类SchoolMember的tell方法
t1.open_branch("shanghai") #拥有父类School的open_branch方法

二、新式类

1、概念

新式类定义时必须继承object类,被定义继承了object类的,就叫做新式类

class Person(object):  #继承object类
"新式类"

2、继承构造方法

新式类初始化构造方法用super关键字去继承

super(子类,self).__init__(name,age)

3、调用父类中相同方法或者相同属性的顺序

新式类多继承的调用方法是顺序是:广度优先查询,如下图:

代码实验如下:

①全部代码

class A(object):  #新式类
def __init__(self):
self.n = "A" class B(A):
def __init__(self):
self.n = "B" class C(A):
def __init__(self):
self.n = "C" class D(B,C):
def __init__(self):
self.n = "D" d = D()
print(d.n) #输出
D 全部代码

先找自己本身类的属性,输出D

②注释D类中代码

class A:
def __init__(self):
self.n = "A" class B(A):
def __init__(self):
self.n = "B" class C(A):
def __init__(self):
self.n = "C" class D(B,C):
pass d = D()
print(d.n) #输出
B

③注释B类中的代码

class A:
def __init__(self):
self.n = "A" class B(A):
pass class C(A):
def __init__(self):
self.n = "C" class D(B,C):
pass d = D()
print(d.n) #输出
A

④注释C类中的代码

class A(object):
def __init__(self):
self.n = "A" class B(A):
pass class C(A):
pass class D(B,C):
pass d = D()
print(d.n) #输出
A

三、经典类

1、概念

经典类定义,什么都不继承

class Person:
"经典类"

2、继承构造方法

父类.__init(self,name,age)

3、调用父类中相同方法或者相同属性的顺序

经典类多继承的调用方法是顺序是:深度优先查询,如下图:

代码实验如下:

①全部代码

class A:#经典类
def __init__(self):
self.n = "A" class B(A):
pass
def __init__(self):
self.n = "B" class C(A):
def __init__(self):
self.n = "C" class D(B,C):
def __init__(self):
self.n = "D" d = D()
print(d.n) #输出
D

②注释D类中代码

class A:
def __init__(self):
self.n = "A" class B(A):
def __init__(self):
self.n = "B" class C(A):
def __init__(self):
self.n = "C" class D(B,C):
pass d = D()
print(d.n) #输出
B

③注释B类中的代码

class A:
def __init__(self):
self.n = "A" class B(A):
pass class C(A):
def __init__(self):
self.n = "C" class D(B,C):
pass d = D()
print(d.n) #输出
A

④注释A类中的代码

class A:
pass class B(A):
pass class C(A):
def __init__(self):
self.n = "C" class D(B,C):
pass d = D()
print(d.n) #输出
C

总结:

  1. 新式类继承object类,经典类不继承任何类
  2. 新式类用super关键字继承构造方法,经典类用 父类.__init(self)来继承
  3. 新式类:广度优先查询,经典类:深度优先查询(因为新式类讲究的是新,所以要找最近的,最新的;然后经典的讲究古老,所以更远更深的)
  4. 值得注意的是,我们上面是在python2中做的,在python3中不管是经典类还是新式类,都是采用的是广度优先查询,已经废弃2中的深度查询了

【python】-- 类的多继承、经典类、新式类的更多相关文章

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

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

  2. python 零散记录(七)(下) 新式类 旧式类 多继承 mro 类属性 对象属性

    python新式类 旧式类: python2.2之前的类称为旧式类,之后的为新式类.在各自版本中默认声明的类就是各自的新式类或旧式类,但在2.2中声明新式类要手动标明: 这是旧式类为了声明为新式类的方 ...

  3. python开发学习-day07(面向对象之多态、类的方法、反射、新式类and旧式类、socket编程)

    s12-20160227-day07 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  4. 第二十天- 多继承 经典MRO 新式MRO super()

    # 多继承:# 在继承关系中.⼦类自动拥有⽗类中除私有属性外其他所有内容.python⽀持多继承.子类可拥有多⽗类. class ShenXian: # 神仙 def fei(self): print ...

  5. python2中新式类和旧式类的对比【译】

    Classes and instances come in two flavors: old-style (or classic) and new-style. ➤类和实例分为两大类:旧式类和新式类. ...

  6. python之继承、抽象类、新式类和经典类

    一.上节补充1.静态属性静态属性 : 类的属性,所有的对象共享这个变量 如果用对象名去修改类的静态属性:在对象的空间中又创建了一个属性,而不能修改类中属性的值 操作静态属性应该用类名来操作 例1:请你 ...

  7. Python中新式类和经典类的区别,钻石继承

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

  8. Python类总结-继承-子类和父类,新式类和经典类

    子类和父类 class Father(object): #子类在使用super调用父类时,Father后面要加object --新式类 def __init__(self): self.Fname = ...

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

    1).python在类中的定义在py2-3版本上是使用的有新式类和经典类两种情况,在新式类和经典类的定义中最主要的区别是在定义类的时候是否出现引用object;如:经典类:Class 类名::而新式类 ...

  10. 洗礼灵魂,修炼python(43)--巩固篇—经典类/新式类

    经典类 1.什么是经典类 就是在使用class关键词时,括号内不添加object类的就叫经典类,前面的博文里是绝对解析过的,所以你应该知道,经典类现在已经仅存在于python2了,因为python3不 ...

随机推荐

  1. Hadoop之HDFS详解

    1.HDFS的概念和特性 它是一个文件系统,其次是分布式的 重要特性: 1).HDFS中的文件在物理上是分块存储(block),新版默认128M 2).客户端通过路径来访问文件,形如:hdfs://n ...

  2. Php如何使用curl

    cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性,以及在PHP中如 ...

  3. 可移动磁盘显示0kb打不开怎么办

      移动硬盘.U盘打不开怎么办 为了方便共享,大多数人都购买了移动硬盘.那么如果有一天,发现移动硬盘打不开了,怎么办?下面为大家介绍移动硬盘打不开的解决方法. 未格式化故障 第一步:双击盘符出现未格式 ...

  4. react-native 项目实战 -- 新闻客户端(6) -- 完善ListView头部视图

    1.因为需要定时器,所以我们要cd到当前项目根目录下安装这个类库: $ npm i react-timer-mixin --save 2.Component/ScrollImage.js /** * ...

  5. vue-router 嵌套路由

    const router = new VueRouter({ routes: [ { path: '/user/:id', component: User, children: [ { // 当 /u ...

  6. 【Excle数据透视表】如何调整压缩形式显示下的缩进字符数

    调整前:                                                                                                 ...

  7. MySQL - Show Processlist 整理(转)

      原文来源:MySQL 5.5 Reference Manual 部分翻译取自:<MySQL_5.1中文参考手册> 转载请注明原文链接http://www.cnblogs.com/len ...

  8. Eclipse.ini参数设置

    最近Eclipse不知道是由于项目过多还是其他原因导致Eclipse进程容易卡死,一卡死Workspace保存出错,项目就全都不见了,又得重新导入...鉴于此原因,自己也上网查询了相关资料,现整理如下 ...

  9. sql server 类oracle vm_contact() 函数创建

    CREATE FUNCTION dbo.fun_orgname(@id int)RETURNS varchar(8000)AS BEGIN      DECLARE @str varchar(8000 ...

  10. Java 常见的异常错误分析大集合

      算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:Negative ...