Python学习笔记(九)继承

1、继承层次结构

  • 定义:继承是指通用类(超类)和专用类(子类)之间的关系
  • 继承的目的是对具有不同行为的类进行建模;值变化的话使用单个类,行为变化的话使用继承
  • 超级超类object:所有没有明确声明超类的类都会从object类扩展

2、实现子类

  • 子类对象自动具有在超类中声明的实例变量,只需要声明在超类对象中没有的实例对象
  • 子类继承超类的所有方法,只需要定义子类的新方法,也可以修改继承来的方法的实现,为继承来的方法提供新的实现时就覆盖了那个方法
  • 头部圆括号里的类名表示继承:class ChoiceQuestion(Question) :
  • 可以使用子类对象调用继承来的方法
  • 超类的实例变量是对那个类私有的,只有超类的方法才可以访问他的实例变量

3、调用超类构造函数

  • 调用方式:子类构造函数中调用超类的构造函数时需要使用super().__init__()这种形式,为了避免混淆两个__init__函数,在子类构造函数中除了调用超类的构造函数,还可以添加额外的语句
  • 顺序:超类构造函数应该在子类定义自己的实例变量之前被调用,定义子类实例变量必须使用self引用

4、覆盖方法

  • 调用方式:在子类新的方法中可以使用super函数调用超类的旧方法,这样就可以避免直接调用超类的实例变量

5、多态

  • 定义:方法调用总是在运行时由实际对象的类型决定,这叫做动态方法查询,这允许我们使用一致的方式处理不同类型的对象。在子类以及超类中均定义了setText方法,对象调用时,不需要显式说明,根据对象的类型不同,自动调用了对应的方法

Python学习笔记(九)继承

  •  isinstance函数:这个函数也可以决定一个对象是否是一个子类的实例,例如isinstance(q, Question),将判断是否是Question类的任何子类的实例,若是返回True
  • 抽象类:至少包含一个抽象方法的类叫做抽象类,不包含抽象方法的类叫做具体类,让方法只有一句raise NotImplementedError 抛出异常的语句,就可以强制子类说明该方法的具体实现

6、几何形状类层次结构