让我们来讨论一下多重继承, 这在Python中是可以实现的｡
现在, 请记住, 我们有我们的用户向导和弓箭手类｡
我们现在正在尝试构建这个游戏｡
让我们清理一些代码｡
我们将不再需要init函数｡
我们这里只有用户｡
我们有从用户继承的向导, 也有从用户继承的弓箭手｡
但是如果我们想创建一个新的角色, 这个角色叫做一个类｡
假设它叫混血博格或者我们的名字｡
我知道我知道
但问题是｡
混血博格一种特殊类型的角色, 因为它拥有巫师所拥有的力量, 那就是攻击｡
它拥有弓箭手的力量, 那就是捷克箭｡
为了好玩, 我们也在这里做广告｡
我们只能说四个人跑得很快｡
好吧, 我会的
所以我们希望这个混血博格人拥有所有这些方法｡
我们能做到吗？
我们可以的｡
我们只需要说“巫师”, 然后说“弓箭手”｡
我们可以给予它任意多的参数｡
作为我们从巫师和弓箭手那里继承的多项遗产｡
所以在这里, 假设我什么都不做, 我就按下传球｡
如果我实例化, 就说是混合型博格｡
一个是混合动力车｡
博格类实例化它｡
我现在可以使用所有这些东西｡
让我们检查一下｡
假设打印HP单点运行｡
我可以这样做吗？
再一次, 一个小小的拼写错误｡
让我们确保这是混合混合博格, 而不是混合板｡
我希望你不会厌倦这个视频｡
好吧, 我得到一个错误｡
缺少两个必需的位置参数｡
名字和权力｡
好吧, 因为｡
好吧, 我们得把这些东西交上去｡
好吧, 我知道了
它接受这些参数｡
好吧, 我会的
假设我们想要一个名字｡
博尔吉和权力是50, 如果我运行这个｡
好吧, 我会的
看起来Ran跑得真快
运行工作｡
我从阿彻那里继承了遗产｡
捷克箭呢？
如果我单击“运行”｡
哦, 我的天
我得到了混合博格｡
对象没有属性箭头｡
现在就去
为什么会这样呢？
因为严格来说我们｡
先从巫师继承, 然后弓箭手和巫师接受｡
名字和权力｡
但我们从来没有给过箭, 还有箭的名字｡
嗯嗯嗯
那么我们如何解决这个问题呢？
我们试试看
假设我们在这里添加了箭头｡
100与此工作｡
嗯嗯嗯
那不管用, 是吗？
这对于多重继承来说是一件棘手的事情, 也是为什么一些编程语言实际上甚至不允许多重继承的原因｡
事情可能会变得有点棘手, 因为在你的头脑中, 你必须确保你理解这些类是如何实现的,
并确保我们没有覆盖任何东西｡
在我们的例子中, 我们可以使代码稍微复杂一些｡
那我们能做些什么呢？
在这里, 我也许可以做这样的事情｡
我可以说定义在里面｡
这就接收了自我｡
它将获得一个名字一个权力｡
而且还｡
箭｡
最后在这里, 我可以说, 我们也将调用Archer｡
打点在里面｡
这样就可以卖出股票, 然后传递名称｡
还有箭｡
所以如果我运行这个｡
好吧, 让我们在这里添加箭头100, 然后单击“运行”｡
你去那里｡
箭头现在工作｡
现在检查一下我们对巫师的攻击是否也起作用｡
如果我们真的进攻｡
然后单击“运行”｡
哦, 天哪｡
现在我们的混合体没有能量了｡
所以再一次, 为了让我们拥有力量, 我们必须复制它, 假设这一次是它自身的巫师,
然后给予它力量｡
如果我单击“运行”｡
好吧, 我会的
攻击有效｡
让我们回去检查Aero｡
确保我们没有弄坏任何东西｡
如果我单击该按钮, 它也会工作｡
最后, 登录怎么办？
好吧, 签到工作｡
已登入｡
好吧, 我会的
哦, 天哪｡
这是很多｡
有几种方法可以解决这个问题｡
但是, 我想向您展示的是, 当您进行多重继承时, 事情可能会变得复杂｡
虽然我们是一步一步地走完它, 但想象一下, 如果有一个程序员在你的工作团队中出现,
并试图理解这些代码｡
我们在这里加入了相当多的逻辑, 事情变得越来越复杂, 很难在你的头脑中记住所有的事情｡
这就是为什么多重继承是一种非常非常强大的东西,
但是强大的力量伴随着巨大的责任, 因为我们创造了越来越多的复杂性｡
这也是某些编程语言不允许进行多重继承的部分原因｡
顺便说一句, 我会让你更加困惑｡
下一个视频, 我们将讨论一个叫Maro的东西｡
这将是另一个很好的例子, 说明为什么你要谨慎对待多重继承｡
我会看到你在那个｡
再见, 再见, 再见