封装继承和多态
Posted guo2733
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装继承和多态相关的知识,希望对你有一定的参考价值。
面向对象三大特性:
- 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
- 继承 实现代码的重用,相同的代码不需要重复的编写
- 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
面向对象三大特性:
- 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
- 继承 实现代码的重用,相同的代码不需要重复的编写
- 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
class 类名(父类名): pass
当 父类 的方法实现不能满足子类需求时,可以对方法进行重写(override)
重写 父类方法有两种情况:
-
覆盖 父类的方法:父类的方法实现 和 子类的方法实现完全不同
具体的实现方式,就相当于在 子类中 定义了一个 和父类同名的方法并且实现。 - 对父类方法进行 扩展:子类的方法实现 中 包含 父类的方法实现
在子类中 重写 父类的方法;在需要的位置使用super().父类方法
来调用父类方法的执行代码;其他的位置针对子类的需求,编写 子类特有的代码实现。
关于 super
- 在 Python 中
super
是一个 特殊的类 super()
就是使用super 类
创建出来的对象- 最常 使用的场景就是在 重写父类方法时,调用 在父类中封装的方法实现
因为:调用父类方法的另外一种方式:在 Python 2.x 时,如果需要调用父类的方法,还可以使用以下方式:父类名.方法(self)
。目前在 Python 3.x 还支持这种方式,但不推荐使用,因为一旦 父类发生变化,方法调用位置的 类名 同样需要修改。
父类的 私有属性 和 私有方法
子类对象 不能 在自己的方法内部,直接 访问 父类的 私有属性 或 私有方法
子类对象 可以通过 父类 的 公有方法 间接 访问到 私有属性 或 私有方法
- 私有属性、方法 是对象的隐私,不对外公开,外界 以及 子类 都不能直接访问
- 私有属性、方法 通常用于做一些内部的事情
3.1.2 多继承
子类 可以拥有 多个父类,并且具有 所有父类 的 属性 和 方法,例如:孩子 会继承自己 父亲 和 母亲 的 特性。
class 子类名(父类名1, 父类名2...): pass
新式类与旧式(经典)类
- 新式类:以
object
为基类的类,推荐使用 - 经典类:不以
object
为基类的类,不推荐使用 - 在 Python 3.x 中定义类时,如果没有指定父类,会 默认使用 object作为该类的 基类 —— Python 3.x 中定义的类都是 新式类,在 Python 2.x 中定义类时,如果没有指定父类,则不会以 object 作为 基类。
- 为了保证编写的代码能够同时在 Python 2.x 和 Python 3.x 运行!今后在定义类时,如果没有父类,建议统一继承自 object:
class 类名(object):
pass
object
是 Python 为所有对象提供的 基类,提供有一些内置的属性和方法,可以使用dir(object)
函数查看。
3.2 多态
面向对象三大特性:
- 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
- 定义类的准则
- 继承 实现代码的重用,相同的代码不需要重复的编写
- 设计类的技巧
- 子类针对自己特有的需求,编写特定的代码
- 多态 不同的 子类对象 调用相同的 父类方法,产生不同的执行结果
- 增加代码的灵活度
- 以 继承 和 重写父类方法 为前提
- 调用方法的技巧,不会影响到类的内部设计
多态 更容易编写出出通用的代码,做出通用的编程,以适应需求的不断变化!
以上是关于封装继承和多态的主要内容,如果未能解决你的问题,请参考以下文章