python8之新式类VS经典类

mac2022-06-30  22

一、概述

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

二、类的多继承

 

2.1 多继承

 

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

 

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方法

三、经典类VS新式类

3.1、新式类

1、概念

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

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

2、继承构造方法

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

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 全部代码 View Code

没有问题,先找自己的属性,输出D

②注释D类中代码

1 class A(object): 2 def __init__(self): 3 self.n = "A" 4 5 class B(A): 6 def __init__(self): 7 self.n = "B" 8 9 class C(A): 10 def __init__(self): 11 self.n = "C" 12 13 class D(B,C): 14 pass 15 16 d = D() 17 print(d.n) 18 19 #输出 20 B 21 22 注释D类中的代码 View Code

③注释B类中的代码

1 class A(object): 2 def __init__(self): 3 self.n = "A" 4 5 class B(A): 6 pass 7 8 class C(A): 9 def __init__(self): 10 self.n = "C" 11 12 class D(B,C): 13 pass 14 15 d = D() 16 print(d.n) 17 18 #输出 19 C 20 21 注释B类中的代码 View Code

④注释C类中的代码

1 class A(object): 2 def __init__(self): 3 self.n = "A" 4 5 class B(A): 6 pass 7 8 class C(A): 9 pass 10 11 class D(B,C): 12 pass 13 14 d = D() 15 print(d.n) 16 17 #输出 18 A 19 20 注释C类中的代码 View Code

3.2 经典类

1、概念

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

class Person: "经典类"

 2、继承构造方法

父类.__init(self,name,age)

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

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

三、总结

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

 

转载于:https://www.cnblogs.com/xiangjun555/articles/6993068.html

相关资源:python新式类和经典类的区别实例分析
最新回复(0)