最后一根希望之柱要走了｡
我们讨论了封装､ 抽象和继承｡
还有第四个, 它有一个很难用的词, 多态性｡
那是什么意思？
好吧, 多意味着许多和更多的主义意味着形成这么多的形式｡
现在我们知道方法属于对象了, 对吧？
我们使用self关键字来处理实例化的对象｡
现在在Python中, 多态性的概念指的是对象类可以共享同一个方法名的方式｡
但是这些方法名称可以根据调用它们的对象而有不同的行为｡
这听起来非常令人困惑｡
让我们看一下代码｡
我们有我们的用户向导和弓箭手类｡
正如我提到的多态性, 不同的对象类可以共享方法名｡
因此, 我们这里有一个共享的TAC, 但每个TAC根据属性执行不同的操作｡
比如说, 当我做Wizard one攻击的时候｡
那就这么办吧｡
魔法师一个人打点攻击｡
如果我点击运行, 我会得到60倍的攻击力, 因为巫师对弓箭手的攻击有一个特殊的意义｡
他们不一样｡
所以尽管它们共享相同的方法名, 因为调用它的对象不同, 但输出是不同的.
所以我们可以做一些有趣的事情｡
假设我有一个巫师, 还有一个弓箭手, 弓箭手是罗宾.
罗宾现在有30个小时了｡
我在这里能做的就是用不同的方式来称呼它们｡
例如, 我可以创建一个全新的功能, 称为球员攻击｡
而这个玩家的攻击需要一个角色｡
在这里我们可以说字符, 点, 攻击｡
现在如果我运行这个代码说｡
玩家攻击｡
巫师一号｡
我负责这个｡
我会以1的威力进行攻击｡
如果我真的要进行攻击, 如果我单击“运行”, 让Archer在这里｡
你可以看到, 同一个函数给出了不同的输出, 尽管我们调用的是同一个函数,
因为我们传递给它的对象不同.
多态性｡
另一种演示方法是执行for循环｡
如果我做了, 我们就说是字符, 我们把巫师一号和弓箭手一号加到一个列表中｡
如果我在这里打印或者运行字符点攻击｡
如果我在这里单击运行｡
同样, 我有两个不同的输出, 尽管我调用的是同一个方法, 因为对象不同｡
这是一个非常强大的概念, 对吧？
因为我们能够根据特定需求进行自定义, 即使假设用户受到攻击｡
法｡
这种默认的攻击方法是, 比如说, 打印, 什么也不做, 因为它只是一个用户｡
即使我运行这些, 比如说打印向导1｡
如果我单击“运行”, 则会出现点攻击｡
它会覆盖原始攻击的内容因为我们的向导类中已经有了这个方法.
但是, 假设我希望用户和向导都运行攻击方法｡
我该怎么做？
现在就去
在下一个视频中, 我们将对此进行更多的探讨｡
但就目前而言, 我可以说用户点攻击｡
并给予它自我｡
因为我在这里接受user作为我的参数｡
然后我就可以运行用户点攻击了｡
让我们看看这里会发生什么｡
如果我单击“运行”｡
我什么都没做, 用60的力量攻击｡
所以多态性允许我们有很多形式｡
为这些派生类重新定义方法的能力就是Wizard和Archer｡
实例化的对象可以基于多态性以不同的方式表现为不同的形式｡
这是很有用的, 因为我们可以根据具体需要修改类｡
但也不必重复我们自己的情况下, 我们想要使用的东西, 如从用户内部的向导攻击｡
所以你有它｡
OP封装的四大支柱｡
抽象化｡
继承, 最后是多态｡
现在就去
再多的视频或书籍也不会教你到底什么时候该用什么｡
然而, 这里的想法是理解这些权力存在与OP｡
你永远不会说, 哦, 我需要实现多态｡
不, 大多数时候你只是沿着编码, 碰巧你在编码的方式强调多态性｡
这只是OP的力量, 虽然这些都是大话｡
最后, 我们已经学会了如何使用它们来以一种高效和干净的方式构造我们的代码｡
这才是重点｡
这一切都是关于组织我们的代码｡
现在, 你们中的一些人可能在我做这个用户攻击自我的时候有点困惑｡
在下一个视频中, 我想进一步探讨这一点｡
我会看到你在那个｡