继承和多态

自学整理记录,大神见笑

单继承

  • 继承就是子类拥有父类所有的方法和属性
  • 继承语法:

class 类名(父类名):
 pass

  • 子类即可直接使用父类已经封装好的方法,也可根据需求,封装子类特有的属性和方法
  • 子类也叫派生类,父类也叫基类
  • 继承的传递性:C类继承B类,B类又继承A类,则C类具有B类和A类所有属性和方法

方法的重写

  • 如果父类方法不能满足子类需求,则子类可以重写父类的方法,重新实现逻辑;执行时,只会调用子类重写的方法,不会调用父类方法
  • 如果父类方法只能满足子类一部分需求,则可以在重写中使用super().父类方法来调用父类的方法,然后再补充另外一部分需求
  • 注:super是一个特殊的类,super()就是使用super类创建出来的对象
  • 另外一种调用方法,在Python2.x中可以使用,3.x中暂时还支持这种方式,但不推荐使用,因为父类发生变化,方法调用位置的类名同样需要修改

父类名.方法(self)

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

  • 子类不能在自己方法内部直接调用父类私有属性和私有方法
  • 子类对象可以通过父类的共有方法间接访问到父类私有方法和私有属性

多继承

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

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

  • 注意:如果继承的父类中有同名方法,则系统会根据MRO顺序调用方法,另外尽量避免继承的父类中有同名方法
  • MRO---方法搜索顺序,Python内置了属性__mro__可以查看方法的搜索顺序,其按照每个类顺序寻找,有该方法就执行,不再寻找;如果没有找到,会报错

print(方法名.__mro__)

  • 该方法返回元组

新式类和旧式类

新式类都是以Object为基类,推荐使用
经典类不以Object为基类,不推荐使用

  • 在Python2.x中,不指定继承Object,则不会以Object为基类
  • 在Python3.x中,默认会继承Object基类
  • 建议如果没有父类,统一继承自Object类,这样2.x和3.x中都能使用

多态

  • 多态以继承和重写父类方法为前提
  • 不同的子类对象调用相同的父类方法

你可能感兴趣的:(继承和多态)