長い間､ このダンダーマジックのメソッドについて話すのを避けていたので､ 長い間待っていたんですね｡
このビデオでは､ いよいよその内容を解き明かしていきます｡
これで､ rderメソッドを使って､ インスタンスがメソッドとして持っているものを見ることができるようになりました｡
そして､ これらはベースとなるオブジェクトクラスから継承されていることをお伝えしました｡
これで､ 私たちの特別なメソッドが強調されたことになります｡
例えば､ 配列の長さを表すlengthのようなものがあることを思い出してください｡
これらは､ 実際にこれらのダンダンメソッドを使って実装されています｡
これらの関数により､ クラスで作成したオブジェクトに対してPython特有の関数を使用することができます｡
では､ どういうことか､ お見せしましょう｡
新しいクラスを作成し､ これはトイ・クラスにします｡
ここで､ toyを定義し､ selfで初期化します｡
そして､ 色とhを持つということにします｡
今度は､ カラーイコール色と言うことにします｡
つまり､ これが私たちの属性になります｡
とHさん｡
すごい｡
私たちのクラスがあります｡
では､ アクションフィギュアを作るとしましょう｡
このアクションフィギュアは､ おもちゃ､ 例えば､ 色は赤､ 年齢は､ でインスタンス化されます｡
新品だからゼロなんです｡
さて､ このオブジェクトに付属しているse trのようなものを使って､ strやアクションフィギュアを作るとします｡
ドットアンダースコアアンダースコアse tt ahのようにします｡
そして､ これを印刷するのです｡
私たちは､ これを手に入れたと見ています｡
私たちがやっているのとまったく同じことです｡
SDRアクションフィギュア｡
こんな感じ｡
あれを見てください｡
これらのダブルアンダーのメソッドは､ Pythonが認識する特別なメソッドです｡
例えば､ ダンダーSTR｡
このようなアクションフィギュアを､ str内蔵の機能を使って使えるようにするのが､ この特殊な方法です｡
実は､ Pythonのドキュメントで特殊なメソッド名の項目を見ると
これらのダンダメソッドの基本的なカスタマイズができることがおわかりいただけると思います｡
そして､ このようなダンダンメソッドを延々と使い続けるのです｡
今すぐ
いちいち読みに行かないでください｡
たくさんあって､ そんなに頻繁に使うわけでもないでしょう｡
使うのは特定の数ケースだけで､ 改造の仕方や裏ワザを知ることです｡
だから
いくつかの例を挙げてみましょう｡
例えば､ SDRが行うことを改造してみましょう｡
自分で定義する
SDRはこちら
セルフコールしてみる｡
そして､ この中で､ 違うものを返します｡
返すのは､ 例えばSEの文字列だ｡
それは､ 言ってみれば､ 独学で学んだ色彩です｡
これを実行すると
赤くなるんです｡
ダンダーのメソッドを修正してはいけないと言ったのを覚えていますか？
まあ､ 許されることもあるけどね｡
もしかしたら､ クラスが特定の動作をするような特殊なケースもあるかもしれません｡
辞書やリスト､ タプルと同じように､ Pythonのすべてのオブジェクトは､ 特定の方法で動作することができます｡
リストはインデックス番号で､ 辞書はキーでアクセスする方法でした｡
それらはすべて､ これらの標準的な方法で実装されています｡
そして､ このように修正したことで､ アクションフィギュア上で呼び出されたときにSDRが赤を返すようになったことがおわかりいただけると思います｡
アクションフィギュア内以外では変わりません｡
これを実行すると､ やはりこのようにアクションフィギュアが動くことがわかります｡
なぜなら､ これは文字列だからです｡
SDRは､ この特定のオブジェクトに使用するときだけ変更されます｡
そうそう｡
他にどんなすてきなことができるのでしょうか｡
まあ､ 長さの意味も変えればいいんですけどね｡
だから､ 自己紹介ができる長さ｡
そして､ ここではただ戻るだけでいいのです｡
今､ 印刷すると｡
アクションフィギュアの長さ｡
そして､ 「実行」をクリックします｡
5個もらえるの？
とてもクールです｡
ところで､ このアンダーラインが少し煩わしくなってきたら､ 正直言って私にとっては少し煩わしくなってきたので､
ここの設定をクリックしてコードインテリジェンスを削除して､ 私のコードが間違っているときに教えてくれないようにします｡
よし､ これでいいんだ｡
長さを変えただけです｡
5を返すダンダー｡
どんどん実験していきましょう｡
アンダースコア､ アンダースコア､ デリート､ デリートみたいなこともできる｡
では､ 実際に今まで見たことがないdeleteキーワードを使ってみましょう｡
削除してください｡
返品と言えばいいのです｡
削除されました｡
こんな感じで､ ここでプリントをやってみよう､ という感じで行ってください｡
実行をクリックすると印刷が削除される｡
削除されたのを返しましたね｡
削除キーワードは､ あまり見かけないので､ あまり教えていません｡
通常､ これはプログラムにおかしなバグを引き起こす可能性があるので､ 個人的には避けたいのですが､ deleteキーワードはプログラム内にある何らかの変数を削除してくれます｡
よし､ 他に何があるんだ？
これを変えよう｡
コールというものを使うこと｡
そして､ 石炭は面白いですね｡
石炭で､ 返す返すもイエスと言いましょう｡
クエスチョンマーク
カールのいいところは､ このおもちゃのクラスがスーパーパワーになることです｡
アクションフィギュアと言った後に､ callを使えば､ 実際にこの括弧で実際のオブジェクトを呼び出すことができるようになるのです｡
呼び出しを使って､ 関数を呼び出す特別な方法があります｡ ところで､ フードの下では､ 関数を呼び出す方法は､
このダンダー呼び出しを使うことです｡
そして､ 「実行」をクリックすると｡
わかった？
はい｡
なんてかっこいいんでしょう｡
わかりました｡
最後にもうひとつ､ そろそろわかってきたと思うので｡
先ほども言いましたが､ これらはすべてこの中に入っています｡
通常は上書きすることはありませんが､ 選択した場合にそうする力があることだけは知っておきたいものです｡
次に､ get itemと呼ばれるものです｡
では､ define get itemをやってみましょう｡
ここでも､ 最初のパラメータとしてselfを使い､ indexをIとし､ ここではself
dotを返すことにして､ その前に属性を追加しておこう｡
私の辞書にはself dot my dictと言い､ nameを追加します｡
イコール､ ヨーヨー｡
そして､ has pets equal to falseをやってみましょうか｡
今これを使うと､ 自分のチンコを言うことができる｡
そして､ 与えたインデックスに基づいて項目を返します｡
では､ どういうことか､ お見せしましょう｡
今､ 印刷をしたら｡
アクションフィギュア｡
ドット
そしてここでは､ ドットの代わりに角括弧を使用しています｡ これは､ おそらく辞書の項目を取得するためにアクセスするのと同じです｡
これで､ get項目を使って､ nameにどんなプロパティがあるかと言うことができます｡
だから､ 名前を言って､ このオチをプリントしたら｡
を付け忘れました｡
ここにカンマがある｡
もう一度やってみよう｡
そして､ 下にスクロールすると､ 私がエラーを読むのがとても上手であることがわかります｡
ネームアクションフィギュアはフーガじゃなくてアクションフィギュアだから定義されてない｡
そのほうがいい｡
あれを見てください｡
私の名前です｡
このブラケット表記を使って､ get項目でアクセスできるようになったのがヨウです｡
ダンダー
とても､ かっこいいです｡
この特別なマジック・メソッドは､ クラスをカスタマイズできるため､ とても興味深いものです｡
また､ Pythonのデフォルトの型が､ どのように特殊な構文を持つアクセスや能力を持っているのかを理解することができます｡
私たちは今､ その力をも手に入れたのです｡
一息ついて､ ちょっとしたエクササイズをしましょう｡