最新消息:

python青少年编程第三季——10、面向对象编程之多重继承

Python 少儿编程 1624浏览 0评论
Python青少年编程第三季

各位小伙伴大家好:

上期我们谈到了子类如何继承父类的父类,以及多态的实现机制。本期我们继续来聊聊继承:前面我们接触的类都是只继承一个父类,接下我们来了解一下什么是类的多重继承。

 

所谓多重继承是指一个类继承了多个类,就好比我们都继承了父亲和母亲的DNA一样。

 

编程里面多重继承的好处是什么呢?看过斗罗大陆的都知道里面的一种技能——武魂融合技,程序里的多重继承就和这个技能类似。

 

先来看个示例程序:

 

python青少年编程第三季——10、面向对象编程之多重继承

 

程序里面定义了四个类:分别是Animal、Cat、Dog、Monster,这四个类每个类中都包含有一个不同的方法。并且Cat继承Animal,Monster又继承了Cat和Dog两个类。

 

定义之后我们实例化了一个sherk对象,最后四行我们分别调用了属于不同类的四个方法,结果都调用成功了,输出相应的描述字符。

 

也就是说Monster类通过继承,不仅获得两个父类的方法,而且还获得父类的父类中的方法。就好比你过年的时候能收到你爸爸妈妈、爷爷奶奶、外公外婆的六个红包一样。

 

这就是多重继承最直观的表现,就是能得到更多的属性和方法。

 

当然细心的小伙伴可能发现了,这些类中都没有定义构造函数。

但是包含构造函数的类在继承上却有一定的区别,一起来看看。

 

python青少年编程第三季——10、面向对象编程之多重继承

 

上面的代码在本类没有定义构造函数,但是在父类中都写了构造函数,那么实例化的时候调用的是哪一个呢?

 

从右侧的结果我们可以看出,子类Monster在实例化的时候调用的是父类cat的构造函数。这也是为什么我们在实例化的时候传递的参数是——“毛毛”,的原因。

 

Python中,寻找构造函数的流程遵循的是深度优先的原则。

也就是说如果本类中没有构造函数,则到父类中寻找,如果在父类cat中也没有写构造函数,那么接下来它会到Animal中寻找而不是Dog中。

 

这就好比,你找家长要零花钱。会先找爸爸要,如果爸爸没有私房钱,那么接下来你会去找爷爷要,而不是找妈妈要。这个过程就相当于深度优先。

 

相反,如果爸爸不给就直接找妈妈,那就相当于广度优先。

 

所以在本类没有定义构造函数,而在父类中有定义的情况下,进行实例化的时候需要注意父类构造函数的参数类型。

 

当然如果本类中定义了构造函数,那自然就不会去父类中寻找了。在实例化的时候就只需要按照本类中的构造函数的要求来传递参数就可以了,就像下面这段代码一样。

 

python青少年编程第三季——10、面向对象编程之多重继承

 

这里我们在本类写了构造函数,只是构造函数不需要传递参数。所以后面在实例化的是时候就不能传递参数,否则就会报错。

 

啰嗦了这么多,关于类的继承就为大家介绍到这里,我们下期再会。

 

欢迎扫描下方二维码入群和我交流

python青少年编程第三季——10、面向对象编程之多重继承

转自公众号:
高维数学

您必须 登录 才能发表评论!