根据B站 “黑马程序员” 的python教程记录笔记。
首先明确面向对象三大特性:
1.封装:根据职责将属性和方法,封装到一个抽象的类中
2.继承:实现代码的重用,相同的代码不需要重复的编写
3.多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
其中封装在前文已经简单讲过,详见:
Python学习——面向对象(OOP)
一、继承:
继承的概念:子类具有父类的所有方法和属性
语法:class 子类(父类):
示例代码:
此时在主函数中:
运行结果如下:
证明此时 Dog 类具有 Animal 类所有的属性和方法,该定义过程叫做继承。
继承具有传递性:
概念:子类拥有父类及父类的父类的所有属性和方法
如新定义类“哮天犬”:
在主函数中:
运行结果如下:
方法的重写:
当父类的方法不能满足子类需求时,可以对方法进行重写(override)
实现方式:在子类中定义一个和父类同名的方法并且实现
示例:
主函数:
将bark方法重写,运行结果如下:
方法的扩展:
子类的方法实现中包含父类的方法实现
父类原本封装的方法实现是子类方法的一部分
使用扩展的方式
方法:在需要的位置使用 super().父类方法 来调用父类方法的执行
代码其它的位置针对子类的需求,编写 子类特有的代码实现
例:
运行结果:
另外:
多继承:
子类 可以拥有 多个父类,并且具有 所有父类 的 属性 和 方法
例如孩子会继承自己父亲和母亲的特性
语法:
class 子类名(父类名1, 父类名2, …):
注意:如果 父类 之间存在 同名的属性或者方法 ,应该尽量避免使用多继承
若出现同名情况,则调用 先继承(在这里是先 父类名1 再 父类名2) 的方法
二、多态:
概念:不同的 子类对象 调用相同的 父类方法,产生不同的执行结果
1.多态 可以 增加代码的灵活度
2.以 继承 和 重写父类方法 为前提
3.是调用方法的技巧,不会影响到类的内部设计
例:人类(父类)衍生出程序员(子类1)和设计师(子类2)
示例:
主函数:
运行结果: