生活中的继承,一般指的是子女继承父辈的财产。
不由任意内置类型派生出的类,称之为经典类。 [经典类 甚至连Object父类都没有了]
class 类名:代码......
class 类名(object):代码
区别:
Python中类分两种:旧式类和新式类:
新式类都从object继承,经典类不需要。
新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索
新式类相同父类只执行一次构造函数,经典类重复执行多次。
Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法,具体如下:
# 父类A
class A(object):def __init__(self):self.num = 1def info_print(self):print(self.num)# 子类B
class B(A):passresult = B() # 继承了父类A的所有方法
result.info_print() # 1
在Python中,所有新式类默认继承object类,object类是顶级类或基类;其他子类叫做派生类。
故事主线:一个煎饼果子老师傅,在煎饼果子界摸爬滚打多年,研发了一套精湛的摊煎饼果子的技术。师父要把这套技术传授给他的唯一的最得意的徒弟。
分析:徒弟是不是要继承师父的所有技术?
# 1. 师傅类
class Master(object):def __init__(self):self.kongfu = '[古法煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')# 2. 徒弟类
class Prentice(Master):pass# 3. 创建对象 daqiu
daqiu = Prentice()
# 继承了师傅的方法
daqiu.make_cake() # 运用[古法煎饼果子配方]制作煎饼果子
故事推进:daqiu 是个爱学习的好孩子,想学习更多的煎饼果子技术,于是,在百度搜索,报班学习煎饼果子技术。
所谓多继承意思就是一个类同时继承了多个父类。
class Master(object):def __init__(self):self.kongfu = '[古法煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')def sayPlay(self):print("老师傅独有技能:唱戏曲")class School(object):def __init__(self):self.kongfu = '[武大煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')def findWork(self):print('学校独有技能:找工作')class Prentice(School,Master): # 多继承 同时继承2个类passdaqiu = Prentice()
# 先是两位老师傅那分别学的独家技能
daqiu.sayPlay()
daqiu.findWork() # 再是共同的技能
daqiu.make_cake() # 默认使用第一个父类的同名属性和方法
注意:当一个类有多个父类的时候,默认使用第一个父类的同名属性和方法。
故事:daqiu掌握了师父和培训的技术后,自己潜心钻研出自己的独门配方的一套全新的煎饼果子技术。
class Master(object):def __init__(self):self.kongfu = '[古法煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')class School(object):def __init__(self):self.kongfu = '[黑马煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')# 独创配方
class Prentice(School, Master):def __init__(self):self.kongfu = '[独创煎饼果子配方]'def make_cake(self):print(f'运用{self.kongfu}制作煎饼果子')daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()print(Prentice.__mro__)
子类和父类具有同名属性和方法,默认使用子类的同名属性和方法。