一、 多态
1.1 定义(重点)
多态 :不同的 子类对象 调用相同的 父类方法,产生不同的执行结果
- 多态 可以 增加代码的灵活度
- 以 继承 和 重写父类方法 为前提
- 是调用方法的技巧,不会影响到类的内部设计

1.2 实现步骤
多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)。
- 定义:多态是一种使用对象的方式,子类重写父类方法,不同子类对象调用相同父类方法,可以产生不同的执行结果
- 好处:调用灵活,有了多态,更容易编写出通用的代码,做出通用的编程,以适应需求的不断变化!
- 实现步骤:
- 定义父类,并提供公共方法
- 定义子类(继承父类),并重写父类方法
- 传递子类对象给调用者,可以看到不同子类执行效果不同
1.3 体验多态
需求:警务人员和警犬一起工作,警犬分2种:追击敌人和追查毒品,携带不同的警犬,执行不同的工作
分析:
1.在 Dog 类中封装方法 work
- 普通狗只是简单的工作
2.定义不同种类狗的
- 定义
ArmyDog继承自Dog,并且重写work方法 - 定义
DrugDog继承自Dog,并且重写work方法
3.定义 Person 类,并且封装一个 和狗工作 的方法
- 在方法内部,直接让 狗对象 调用
work方法
案例小结
Person类中只需要让 狗对象 调用work方法,而不关心具体是 什么狗work方法是在Dog父类中定义的
- 在程序执行时,传入不同的 狗对象 实参,就会产生不同的执行效果。
# 需求:警务人员和警犬一起工作,警犬分2种:追击敌人和追查毒品,携带不同的警犬,执行不同的工作
# 1. 定义父类,提供公共方法: 警犬 和 人
class Dog(object):
def work(self): # 父类提供统一的方法,哪怕是空方法
pass
# 2. 定义子类,子类重写父类方法:定义2个类表示不同的警犬
class ArmyDog(Dog): # 继承Dog类
def work(self): # 子类重写父类同名方法
print('追击敌人...')
class DrugDog(Dog):
def work(self):
print('追查毒品...')
# 定义人类
class Person(object):
def work_with_dog(self, dog): # 传入不同的对象,执行不同的代码,即不同的work函数
dog.work() # 在方法内部,直接让 狗对象 调用 work 方法
# 3. 创建对象,调用不同的功能,传入不同的对象,观察执行的结果
ad = ArmyDog()
dd = DrugDog()
jingyuan = Person()
jingyuan.work_with_dog(ad)
jingyuan.work_with_dog(dd)
追击敌人…
追查毒品…
本文深入探讨了多态的概念,强调其在增加代码灵活性方面的重要性。通过一个具体的警务人员与不同警犬合作工作的例子,阐述了多态的实现步骤,包括定义父类方法、子类重写以及如何在父类方法中调用子类方法来体现不同行为。通过这个案例,展示了多态如何使得代码更加通用,适应不同场景的需求。
798

被折叠的 条评论
为什么被折叠?



