笨方法学Python 习题 44: 继承(Inheritance) VS 合成(Composition)

童话里经常会看到英雄打败恶人的故事,而且故事里总会有一个类似黑暗森林的场景——要么是一个山洞,要么是一篇森林,要么是另一个星球,反正是英雄不该去的某个地方。当然,一旦反面角色在剧情中出现,你就会发现英雄非得去那片破森林去杀掉坏人。当英雄的总是不得不冒着生命危险进到邪恶森

林中去。你很少会碰到这样的童话故事,说是英雄机智地躲过这些危险处境。你从不会听英雄说:“等等,如果我把白富美留在家里,自己跑出去当英雄闯世界,万一我半路死了,白富美就只好嫁给另一个矮穷挫王子。矮穷挫啊卧槽!我还是呆在这儿,做点出租童工的生意吧。”如果他选择了这条路,就不会碰到火、沼泽、死亡、复活、格斗、巨人,或者任何算得上故事的东西了。就是因为这个,这些故事里的森林就像黑洞一样,不管英雄是干嘛的,最终都无法避免地陷入其中。

在面向对象编程中,“继承”就是那片邪恶森林。有经验的程序员知道如何躲开这个恶魔,因为他们知道,在丛林深处的“继承”,其实是邪恶女皇“多重继承”。她喜欢用自己的巨口尖牙吃掉程序员和软件,咀嚼这些堕落者的血肉。不过这片丛林的吸引力是如此的强大,几乎每一个程序员都会进去探险,梦想着提着邪恶女皇的头颅走出丛林,从而声称自己是真正的程序员。你就是无法阻止丛林的魔力,于是你深入其中,而等你冒险结束,九死一生之后,你唯一学到的,就是远远躲开这片破森林,而如果你不得不再进去一次,你会带一支军队。这段故事就是为了教你避免使用“继承”这东西,这样说是不是更带感呢?有的程序员现在正在丛林里跟邪恶女皇作战,他会对你说你必须进到森林里去。他们这样说其实是因为他们需要你的帮助,因为他们已经无法承受他们自己创建的东西了。

而对于你来说,你只要记住这一条:大部分使用继承的场合都可以用合成取代,而多级继承则需要不惜一切地避免之。

什么是继承

继承的用处,就是用来指明一个类的大部分或全部功能,都是从一个父类中获得的。当你写 classFoo(Bar) 时,代码就发生了继承效果,这句代码的意思是“创建一个叫 Foo 的类,并让他继承“Bar” 。当你这样写时, Python 语言会让 Bar 的实例所具有的功能都工作在 Foo 的实例上。这样可以让你把通用的功能放到 Bar 里边,然后再给 Foo 特别设定一些功能。

当你这么做的时候,父类和子类有三种交互方式:

1. 子类上的动作完全等同于父类上的动作

2. 子类上的动作完全改写了父类上的动作

3. 子类上的动作部分变更了父类上的动作

我将通过代码向你一一展示。

隐 式继承(Implicit Inheritance )

首先我将向你展示当你在父类里定义了一个函数,但没有在子类中定义的例子,这时候会发生隐式继承。</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值