python——继承 super和mro的使用 多态--鸭子类型
继承
单继承下的属性查找
多继承下的属性查找
super和mro的使用
多态和鸭子类型
—————————————————————————————————————————————————面向对象的三大特征:
封装,继承,多态
什么是继承?
继承就是让类和类之间产生父子关系,子类可以拥有父类的静态属性和方法。继承就是可以获取另外一个类的静态属性或者普通方法,(并非所有成员)。
在Python中,新建的类可以继承一个或者多个父类,父类又可以称为基类或者超类,新建的类称为派生类或子类
为什么要用继承?
因为继承可以减少代码的冗余以及提高代码的重用性
类解决了 对象与对象之间的代码冗余问题
继承解决了 类与类之间的代码冗余问题
怎么使用继承?
经典类 没有继承 object类
新式类 继承object类
在python2中区分 经典类和新式类 如果是python3的版本 默认的类都是继承了 object类,在python3版本中没有经典与新式类的区分
单继承 一个类继承一个
多继承 继承两个或多个以上
————————————————————————————————————————————————————————————————————————————————————————单继承属性查找
——————————————————————————————————————————多继承属性查找
分菱形查找和非菱形查找
菱形查找分:经典类和新式类
经典类:按照深度优先查询
新式类:按照广度优先查询
ps:在python3中都是新式类,所以多继承下的属性查找,如果属性找不到,就按照广度优先查询
一般情况下,最好不要使用多继承
————————————————————————————————————————————super和mro的使用
super
,最直接的想法就是它代表了父类,替父类执行某些方法
mro列表就是C类的属性查找顺序
如果你继承的类中出现了super()关键字的用法,就要使用mro列表来查找属性
子类会先于父类被检查 多个父类会根据他们在列表中的顺序被检查 如果对下一个类存在两个合法的选择,选择第一个父类
常用super方法
——————————————————————————————————————————多态和鸭子类型
多态:一种事物的多种形态
eg:
水:液态水、气态水、固态水
动物:人、狗、猫、猪...
之所以说人、狗、猪是动物,是因为他们都具备动物的特征,speak功能
import abc # abstract class 抽象类 具体的Specific
class Animal(metaclass=abc.ABCMeta): # 把animal类变成了抽象类
父类中得方法不是为了实现逻辑的,实现功能的,而是单纯的为了限制子类的行为
@abc.abstractmethod # 把抽象类中得方法变成抽象方法, 它不实现具体的功能,就是单纯的为了限制子类中的方法
def speak(self):
pass
@abc.abstractmethod
def jiao(self):
pass
抽象类和普通类有什么区别? 抽象类只能够被继承、不能够被实例化
怎么限制子类People类必须有speak功能? 我们可以在父类中来限制子类的行为,其实就是限制子类中必须有某些方法
推荐的格式:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)