一、继承简介
#1、什么是继承 一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类基类超类 继承的特性:子类可以使用父类的所有 方法和 属性 #为什么用继承 减少类与类之间代码冗余 #3、python支持多继承,用逗号分隔开多个继承的类 #4、如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现。
#继承与抽象(先抽象再继承) 抽象:抽取类似或比较像的部分, 它的作用是划分类别,抽象只是分析过程中的一种技巧,通过抽象可以得到类 继承:是基于抽象的结果, 派生:子类拥有与父类不同的内容 覆盖:子类与父类拥有完全相同的名称
二、方法的重写
#如果父类的方法不能满足需求时,可以对方法进行 重写 #重写父类的方法有两种: #1)覆盖父类的方法 在子类中定义与父类同名的方法(按属性的查找顺序看,不会再调用父类中同名的方法) #2)对父类的方法进行 扩展 在需要的位置使用super()父类的方法名来调用父类的方法 针对子类的需求,编写子类的方法
class Animal: def __init__(self,name,age): self.name = name self.age = age class Dog(Animal): def __init__(self,name,age,sex): #添加自己需要的属性 super().__init__(name,age) self.sex = sex dog1 = Dog('ALEX',18,'male') print(dog1.__dict__)
三、在继承背景下属性的查找顺序
#在单继承背景下属性查找的优先级:对象--->对象的类--->父类--->父父类 #在多继承背景下属性查找的优先级:对象--->对象的类--->按照从左往右的顺序
#新式类与经典类(在py2中才区别新式类和经典类) #新式类:直接或间接继承了object的类,都是新式类 在py3中 如果没有指定父类,默认就会继承object #即py3中所有的类都是新式类 #经典类:没有继承object的类的类,以及该类的子类,都是经典类
#MRO(method resolution order)方法解析顺序 #获得某个类的MRO列表。 class Foo: def f1(self): print('from foo f1') def f2(self): print('from foo f2') self.f1() class Bar(Foo): def f1(self): print('from bar f1') s = Bar() s.f2() print(Bar.mro())