8.3.1 继承关系

8.3.1 继承关系

现实世界中的事物相互间有许多联系,通常将具有相同特征和行为的事物划分为同一个种类,如动物、植物、人类等。相同种类的事物之间又存在着各种关系,其中从属关系就是常见的一种。如植物包含蔬菜、水果等,其中蔬菜又可分为瓜类、叶类等,水果又可分为浆果类、核果类、瓜果类等,关系图表示如图8-4所示。

图8-4 植物分类图

图8-4反映了植物的分类层级关系,从植物到瓜果分成了3个层级,低层级的植物具备高层级植物的所有特征和行为,并且还增加了高层级不具备的、自身所有的特征和行为。所有的瓜果都是植物,但并不是所有的植物都是瓜果。从高层级到低层级是一个从抽象到具体的过程,反过来,从低层级到高层级则是一个从具体到抽象的过程。

从面向对象的角度来看,所有的事物都对应一个类,如植物类、水果类、瓜果类等。每一个事物都有自己的特征和行为,对应类的属性和方法。在层级关系中,可以看成一个类继承了另一个类,自动拥有了另一个类的属性和方法,并且可以进一步扩展完善,添加新的特征和方法。一般来说,当一个类继承自其他类时,继承类称为子类,被继承类称为父类或超类。如水果继承自植物,故植物是父类,水果是子类。在Python中,继承的语法格式如下:

如果在定义类的时候没有标注父类,则默认继承自object。万物皆为对象,故object是所有类的父类。植物与水果的关系可用代码表示如下:

运行结果如下:

在类Plant中定义了构造方法和对象方法,在构造方法中定义了对象属性self.water,在对象方法中引用了对象属性。类Fruit继承自Plant,能自动继承父类Plant的方法和属性。

但不是所有的父类属性和方法都被继承,子类不能直接访问父类的私有属性和私有方法,需要通过“_类名__私有元素”来访问父类的私有属性或私有方法。但这种访问并不建议使用,一般情况下,私有属性和私有方法都是不对外公开的,只能用来做其他内部的事情。