source: study/Programming/Python/basic/继承.md

继承

1.1 继承的概念 语法 特点

子类拥有父类所有的方法和属性

1.1.1 继承的语法

class 类名(父类名):
	pass
  • 子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发
  • 子类中应该根据职责,封装子类特有的属性和方法

1.1.2 专业术语

  • Dog类是Animal类的子类,Animal类是Dog类的父类,Dog类从Animal继承
  • Dog类是Animal类的派生类, Animal类是Dog类的基类,Dog类从Animal派生

1.1.3 继承的传递性

  • 子类 拥有 父类以及父类的父类中封装的 所有属性和方法

1.2 方法的重写

  • 子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发
  • 当父类的方法实现不能满足子类需求时,可以对方法进行重写(override)

  • 重写父类的方法有两周
    • 覆盖父类的方法
    • 对父类方法进行扩展

1.2.1 覆盖父类的方法

  • 如果在开发中,父类的方法实现和子类的方法实现,完全不同
  • 就可以使用覆盖的方式,在子类中重写父类的方法实现

具体的实现方式, 就相当于在子类中定义一个和父类同名的方法并且实现

重写之后,在运行时,只会调用子类中重写的方法,而不再会调用父类封装的方法

1.2.2 对父类方法进行扩展

  • 如果在开发中, 子类的方法实现中包含父类的方法实现
    • 父类原本封装的方法实现是子类方法的一部分
  • 就可以使用扩展的方式
    1. 在子类中重写父类的方法
    2. 在需要的位置使用super().父类方法来调用父类方法的执行
    3. 代码其他位置针对子类的需求,编写子类特有的代码实现

关于super

  • Pythonsuper是一个特殊的类
  • super()就是使用super类创建出来的对象
  • 最常使用的场景就是在重写父类方法时,调用在父类中封装的方法实现

1.3 父类的私有属性和私有方法

  1. 子类对象不能在自己的方法内部直接访问父类的私有属性或私有方法
  2. 子类对象可以通过父类的公有方法间接访问私有属性或私有方法
  • 私有属性 方法 是对象的隐私,不对外公开,外界已经子类都不能直接访问
  • 私有属性 方法 通常用于做一些内部的事情

2 多继承

概念

  • 子类可以拥有多个父类,并且所有父类的属性和方法

语法


class 子类名(父类1, 父类2...)
	pass

2.1 注意事项

  • 如果不同的父类中存在同名的方法,子类对象在调用方法时,会调用哪一个父类的方法?

提示: 开发时,应该尽量避免这种容易产生混淆的情况!–如果父类之间存在同名的属性或者方法,应该尽量避免使用多继承