python类中、类可以多个继承_【python】-- 类的多继承、经典类、新式类

本文介绍了Python中的多继承概念,通过实例展示了如何创建多继承的类。同时,解释了新式类和经典类的区别,包括它们的构造方法继承方式以及在多继承时调用父类方法的顺序。新式类需要继承object,使用super关键字,并遵循广度优先查询原则,而经典类不继承任何类,采用深度优先查询。在Python3中,所有类都是新式类。
摘要由CSDN通过智能技术生成

继承知识点补充

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

一、多继承

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

class SchoolMember(object): #SchoolMember类

'''学校成员基类'''

deftell(self):print("the schoolmeber is tell...")class School(object): #School类

"""学校类"""

defopen_branch(self,addr):print("openning a new branch in",addr)class Teacher(SchoolMember,School): #子类Teacher同时继承了SchoolMember,School两个类

"讲师类"

defteaching(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"

classB(A):def __init__(self):

self.n= "B"

classC(A):def __init__(self):

self.n= "C"

classD(B,C):def __init__(self):

self.n= "D"d=D()print(d.n)#输出

D

全部代码

View Code

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

②注释D类中代码

classA:def __init__(self):

self.n= "A"

classB(A):def __init__(self):

self.n= "B"

classC(A):def __init__(self):

self.n= "C"

classD(B,C):passd=D()print(d.n)#输出

B

View Code

③注释B类中的代码

classA:def __init__(self):

self.n= "A"

classB(A):pass

classC(A):def __init__(self):

self.n= "C"

classD(B,C):passd=D()print(d.n)#输出

A

View Code

④注释C类中的代码

classA(object):def __init__(self):

self.n= "A"

classB(A):pass

classC(A):pass

classD(B,C):passd=D()print(d.n)#输出

A

View Code

三、经典类

1、概念

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

classPerson:"经典类"

2、继承构造方法

父类.__init(self,name,age)

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

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

代码实验如下:

①全部代码

class A:#经典类

def __init__(self):

self.n= "A"

classB(A):pass

def __init__(self):

self.n= "B"

classC(A):def __init__(self):

self.n= "C"

classD(B,C):def __init__(self):

self.n= "D"d=D()print(d.n)#输出

D

View Code

②注释D类中代码

classA:def __init__(self):

self.n= "A"

classB(A):def __init__(self):

self.n= "B"

classC(A):def __init__(self):

self.n= "C"

classD(B,C):passd=D()print(d.n)#输出

B

View Code

③注释B类中的代码

classA:def __init__(self):

self.n= "A"

classB(A):pass

classC(A):def __init__(self):

self.n= "C"

classD(B,C):passd=D()print(d.n)#输出

A

View Code

④注释A类中的代码

classA:pass

classB(A):pass

classC(A):def __init__(self):

self.n= "C"

classD(B,C):passd=D()print(d.n)#输出

C

View Code

总结:

新式类继承object类,经典类不继承任何类

新式类用super关键字继承构造方法,经典类用 父类.__init(self)来继承

新式类:广度优先查询,经典类:深度优先查询(因为新式类讲究的是新,所以要找最近的,最新的;然后经典的讲究古老,所以更远更深的)

值得注意的是,我们上面是在python2中做的,在python3中不管是经典类还是新式类,都是采用的是广度优先查询,已经废弃2中的深度查询了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值