前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python第二十二课:类的继承详解

Python第二十二课:类的继承详解

作者头像
HuangWeiAI
发布2019-07-30 15:07:28
2770
发布2019-07-30 15:07:28
举报
文章被收录于专栏:浊酒清味浊酒清味

我们在上一节课中已经提到了继承的功能了,当我们用class Banana(Fruit) 的时候已经开始了继承,即让Banana去继承Fruit这个类。继承意味着一个类(Banana)的大部分或者全部功能来自其父类(Fruit)。具体而言继承的方式有三种:

(1)隐式继承

在上面的代码中,我们用pass创建空代码,也就是说在Child这个类中只继承Parent类而没有任何别的定义和操作,我们把这种继承方式叫做隐式继承。注意到上面的代码中我们在Child这个类当中没有定义带有打印功能的函数,它通过继承父类Parent中的打印函数来自动获得。

运行结果:

(2)显式覆盖

假想我们在子类中定义一个和父类同样的函数,会发生什么呢?答案是子类中的函数会覆盖来自于父类中的函数,也就是说子类用的函数是自己定义的,而非从父类中继承来的。当然我们这里的覆盖的意思不是所把父类的函数也改变。

这个代码中,我们给子类Child也定义了function,打印的内容换成了How old are you。于是我们将会看到两个类的实例出来的结果是不一样的。

运行结果:

(3)在运行前或运行后替换

显式覆盖的方法会让子类完全覆盖来自于父类的继承。而如果我们使用上一节课提到的super函数会带来一个特殊的效果,当在显示覆盖中使用一次super,则会让子类暂时继承父类,而在运行super函数前后还是会显式覆盖,废话不多说,上代码:

这个代码看上去有点绕,我们仔细分析一下。在父类中我们定义了function,打印内容是Hello World,而在子类中,我们也定义了同名的function,按照第二种显示覆盖继承的方法,这里function中的内容应该和父类没有任何关系,因为需要满足覆盖原则。但是我们稍有不同,我们中里面调用了super函数,其起到的效果是短暂继承父类中的function。我们来看运行结果:

这个结果还是挺神奇的,第三行的Hello World就是来自于父类的打印内容。

super()和__init__()

在实际操作中,我们一般会在子类的__init__()函数中对父类进行初始化。代码如下

这里的super(Child, self)其实可以等效于Parent。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浊酒清味 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档