一、多态
- 1.1、面向对象三大特性
- 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
定义类的准则 - 继承 实现代码的重用,相同的代码不需要重复的编写
- 设计类的技巧
- 子类针对自己特有的需求,编写特定的代码
- 多态 不同的 子类对象 调用相同的 父类方法,产生不同的执行结果
- 多态 可以 增加代码的灵活度
- 以 继承 和 重写父类方法 为前提
- 是调用方法的技巧,不会影响到类的内部设计
二、多态的案例(汽车、皮卡、人)
- 2.1、需求
- 在 Car 类中封装方法 run
- 普通汽车只是简单的run
- 定义
Pickup(皮卡)
继承自Car
,并且重写run
方法
Pickup(皮卡)
在跑的时候可以拉货
- 定义 Person 类,并且封装人开汽车的方法
drive
- 在方法内部,让汽车 对象 调用
run
方法
- 案例小结
- Person 类中只需要让 汽车对象 调用 run 方法,而不关心具体是 什么汽车
- run 方法是在 Car 父类中定义的
在程序执行时,传入不同的 汽车对象 实参,就会产生不同的执行效果
多态 更容易编写出出通用的代码,做出通用的编程,以适应需求的不断变化!
class Car(object): def __init__(self, name): self.name = name def run(self): print("%s 简单的在路上跑" % self.name) class Pickup(Car): def run(self): print("%s 在跑的时候可以进行拉货" % self.name) class Person(object): def __init__(self, name): self.name = name def drive(self, car): print("%s 开着 %s 去拉货" % (self.name, car.name)) # 让狗玩耍 car.run() # 1. 创建一个汽车对象 # small_car = Car("小汽车") pickup = Pickup("皮卡") # 2. 创建一个Jack对象 Jack = Person("Jack") # 3. 让Jack调用drive的方法 Jack.drive(pickup)