Python 面向对象5:多态

一、多态

  • 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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容