继承
1.什么是继承?
在程序中继承是一种新建子类的方式 新创建的类称之为之类派生类 被继承的类称之为父类基类超类
2.为何要用继承?
减少类与类之间代码冗余的问题
3.如何继承?
先抽象再继承
python中继承的特点分为单继承和多继承
class Parent: pass class Parent2: pass class Sub1(Parent): pass #单继承 class Sub2(Parent,Parent2): pass #多继承
python2和python3在继承上的区别
新式类:但凡继承object类的子类,以及该子类的子子类....都称为新式类
经典类:没有继承object类的子类,以及该子类的子子类....都称为经典类
只有python2中才区分新式类与经典类
派生
在子类派生出的新功能中如何重用父类的功能:
方式一:指名道姓地访问某一个类中的函数 与继承无关
class People: def __init__(self,name,age): self.name=name self.age = age class Student(People): def __init__(self,name,age,num): People.__init__(self,name,age) self.num = num
方式二:super 在python3中super不传参数,调用该函数会得到一个特殊的对象,该对象是专门用来访问父类中的属性的
强调:super会严格参照类的mro列表依次查找属性
class People: def __init__(self,age,name): self.age=age self.name=name class Teacher(People): def __init__(self,age,name,salary): super(Teacher,self).__init__(age,name) self.salary = salary
属性的查找:
1.在单继承背景中,无论是新式类还是经典类属性查找顺序都一样
先obj->类->父类......
2.在多继承背景下,如果一个子类继承了多个分支,但是多个分支没有汇聚到一个非object类,无论是新式类还是经典类属性查找顺序都一样
会按照从左到右的顺序一个分支一个分支的查找下去
3.在多继承背景下,如果一个子类继承了多个分支,但是多个分支最终汇聚到一个非object类
新式类:广度优先查找
经典类:深度优先查找