お帰りなさい｡
前のビデオでは､ 親クラスのサブクラスからメソッドを呼び出す方法を示しました｡
そこで､ 私たちの場合は､ ユーザードットアタックを行いました｡
攻撃方法とユーザーを実行するために｡
今は､ 違うことを試したいので､ 攻撃方法は外しています｡
ここにinit関数を作り､ このinit関数がselfを受け取るようにしたい｡
そして､ ユーザーが受け取るのは､ 例えばメールだとします｡
なぜなら､ 私たちのゲームのユーザーは全員､ 電子メールを持つ必要があるからです｡
そしてここでは､ self dot emailがemailに等しいと言うことにします｡
シンプルで良いですね｡
今､ この中に｡
このコードを実行するとしたら､ とりあえずuser dot attackを削除してみましょう｡
つまり､ 同じウィザードがあり､ これを追加したり､ 申し訳ないがこのinitを追加したりするだけです｡
そして､ 私たちのウィザードを獲得しました｡
ここでウィザードを実行し､ ウィザード1ドットメールを実行するとします｡
実行」をクリックすると
うーん｡
得ることができます｡
Wizardオブジェクトには属性がありません｡
電子メール
うーん｡
でも､ ウィザードを作るときにユーザーが呼ばれるんじゃなかったっけ？
Wizard Oneをインスタンス化すると｡
まあ､ 継承するかもしれないけれども､ 例えば､ 私がドットをやったら､ 継承するかもしれない｡
サインインしてください｡
ユーザーから
そして､ 実行をクリックすると､ それを継承していることがわかります｡
ウィザードには､ すでにinit関数がコンストラクタとして存在していますね｡
では､ どうすればこれを解決できるのか｡
まあ､ 一つの方法として､ ここにメールを追加すればいいんですよね？
そして､ メールを持っているだけでいい｡
ちょうどこのあたりに属性があります｡
しかし､ これの何が問題なのでしょうか？
まあ､ 非効率的ではありますよね｡
だって､ アーチャークラスを作ったら､ 同じことをやらなきゃいけないんだもん｡
そして､ これらの属性がすべてのサブクラスで同じになることが分かっている場合､ ここでそれを行いたいのです｡
では､ より効率的な方法は何でしょうか？
さて､ この中からユーザーのinitメソッドを呼び出したいと思います｡
そうですね｡
なぜなら､ 新しいウィザードをインスタンス化するたびに､ このinit関数が呼び出されるからです｡
その方法は､ ユーザードットということですね｡
その中にアンダースコアのアンダースコアがある｡
そして､ それを自己に与える｡
そして､ メール｡
そして､ メールは受け渡しするものです｡
もし､ 私がここに降り立ったときに､ こう言えるように｡
Merlin at gmail. comがメールになりそうです｡
そうすると､ 今､ もし私が､ そうすると｡
Wizard Oneのドットメール､ 私はRunをクリックします｡
もう一度､ マーリンのメールが届く｡
私たちがしたことは､ initメソッドを呼び出しただけです｡
ウィザードの中のユーザーの
新しいウィザードをインスタンス化するときに､ この関数を実行し､ この関数の中で user dot init
を実行し､ ここで引数として渡した電子メールを渡しました｡
さて､ これは一つの方法である｡
そして､ もうひとつの方法､ それはスーパーと呼ばれるものです｡
そして､ それがキーワードになります｡
ご覧のように､ ここで強調されています｡
そして､ スーパーを走らせるだけです｡
そしてSuperはスーパークラス､ つまりwizardの上のクラスであるuserを指しています｡
そして､ これは実はPython 2の時点で新たに追加されたものなのです｡ 2.
Superを使うと､ 実はselfが不要になるので､ コードはさらにすっきりし､ 渡すのはthisと､ runをクリックした場合だけです｡
それでも正解は出るんです｡
スーパー
この方法でユーザーを参照することができ､ selfを渡すことを気にする必要がありません｡