欢迎回来｡
在上一个视频中, 我向您展示了如何从父类的子类中调用方法｡
所以在我们的例子中, 我们使用了点攻击｡
以运行攻击方法和用户｡
现在我已经删除了攻击方法, 因为我想尝试一些不同的东西｡
我想在这里创建一个初始化函数, 这个初始化函数将使用self｡
然后假设用户将收到电子邮件｡
因为我们游戏的所有用户都需要有电子邮件｡
在这里, 我们只说self. email等于email｡
漂亮又简单｡
现在在这里｡
如果我运行这段代码, 让我们现在删除用户点攻击｡
所以我们有相同的向导, 我们只是添加了这个或对不起, 这个init｡
我们的巫师赢了｡
如果我在这里运行向导, 假设我们要运行一个. email向导｡
如果我单击“运行”｡
嗯嗯嗯
我明白了｡
向导对象没有属性｡
电子邮件｡
嗯嗯嗯
但我想在创建向导时会调用用户, 对吗？
当我们实例化巫师一号的时候｡
问题是, 虽然我们可以继承, 比如说, 如果我做了点, 我们可以继承｡
请登入｡
来自用户｡
如果我单击“运行”, 我们会看到我们继承了它｡
向导已经有了一个init函数, 它已经是一个构造函数了, 对吗？
那么我们该如何解决这个问题呢？
一种方法是在这里添加电子邮件, 对吗？
只要有电子邮件｡
属性就在这里｡
但这有什么问题呢？
这效率很低, 对吧
因为如果我创建了一个Archer类, 我就必须做同样的事情｡
当我们知道所有这些属性在所有子类上都是一样的, 我们就在这里做｡
那么, 什么是更有效的方法呢？
我们想从这里调用用户的init方法｡
好吧, 我知道了
因为每次我们实例化一个新的向导时, 都会调用这个init函数｡
这样做的方法就是说user.
下划线下划线｡
然后给予它自我｡
然后是电子邮件｡
然后电子邮件是我们传递进来的东西｡
所以如果我真的走到这里, 我可以说｡
Gmail的梅林｡ com将是电子邮件｡
所以现在如果我这样做, 让我们说｡
点向导一的电子邮件, 然后单击“运行”｡
我又收到了梅林的邮件｡
我们所做的就是调用init方法｡
向导中的用户｡
因此, 当我们实例化一个新向导时, 我们运行了这个函数, 在这个函数中, 我们运行了user.
init, 并传入了电子邮件, 我们在这里将其作为参数传入｡
这是一种方法｡
还有另一种方法, 叫做超级｡
这是一个关键词｡
如您所见, 它在这里被突出显示｡
而我们所做的就是超级跑｡
而Super是指超类或向导之上的类, 即用户｡
这实际上是Python 2的一个新添加｡ 2.
有了Super, 我们实际上不再需要self, 所以我们的代码看起来更干净了, 我们传递的只是这个, 如果我们点击run｡
我们还是得到了正确的答案｡
好极了｡
允许我们以这种方式引用用户, 而不必担心传递自己｡