【第 11 天】继承 与 多态

继承 与 多态

继承

  • 子类继承父类,子类的实例即是子类的类型也是父类的类型。判断是否为某个类型(的实例)可以用函数 isinstance(dog, Dog)
  • 由以上的特性,在定义某些方法时,可以定义传入的类型为父类,则也可以传入不同的子类,且子类可以重写父类的方法从而显示多态性。

多态

  • 多态的好处在于:我们需要传入多个子类,但是我们定义的接收类型只需要是一个父类,因为子类都是父类的类型。然后,我们只要按照对父类的操作即可,如果子类重写了父类的方法,那么实际执行会自动调用子类的方法。
  • 即 对于一个实例,我们只需要知道它类型的父类,不需要知道其确切的子类型,就可以调用原本父类的方法,如果子类重写了这个方法,则会自动执行子类里的。
  • 即 “开闭”原则
    • 对扩展开放: 允许新增子类和重写父类的方法(允许新增Animal子类)
    • 对修改封闭:不需要修改依赖父类类型的相关函数(不需要修改依赖Animal类型的run_twice()等函数)

静态语言 VS 动态语言

  • Python这种动态语言不要求严格的继承体系,feel-like object 鸭子类型。
    不要求传入的一定是 Dog 类型,只要保证传入的对象像Dog类一样,有一个 run() 方法就可以
  • 对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。
  • 具体参见代码

你可能感兴趣的:(【第 11 天】继承 与 多态)