python29days

发布时间 2023-10-09 19:18:28作者: 拆尼斯、帕丁顿

继承

单继承下的属性查找

多继承下的属性查找

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功能? 我们可以在父类中来限制子类的行为,其实就是限制子类中必须有某些方法

 

 

 

 

推荐的格式: