文章目录

  • 一、 多态
  • 1.1 定义(重点)
  • 1.2 实现步骤
  • 1.3 体验多态


一、 多态

1.1 定义(重点)

多态 :不同的 子类对象 调用相同的 父类方法,产生不同的执行结果

  • 多态 可以 增加代码的灵活度
  • 继承重写父类方法 为前提
  • 是调用方法的技巧,不会影响到类的内部设计

Python 中多态方法传参数 python多态的理解_自动驾驶

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)

追击敌人…
追查毒品…