お帰りなさい｡
前回のビデオでは､ 大きなブーイングをしたことがわかりました｡
つまり､ 私たちは名前を書き､ 話すことをやり遂げたのです｡
そして､ せっかくの授業が､ これでは台無しです｡
確かに､ 新しいオブジェクトをインスタンス化したら
走ったり喋ったりはしますが､ 今のプレイヤー1は全く役に立ちません｡
名前も喋ることもない｡
Booと書いてあるだけです｡
全く役に立たない｡
さて､ Pythonにはpublicとprivateという考え方がありますが､ これは抽象化の話と関連しています｡
抽象化の考え方は､ 情報を隠して､ ユーザーが気になるものだけにアクセスできるようにすることです｡
そうですね｡
ですから､ 理想を言えば､ initにアクセスできないようにすることです｡
理想的には､ 例えば名前やhを修正､ 実行､ 変更できないようにすることです｡ 私たちのゲームでプレイヤーキャラクターを作るとき､
できればプレイヤーは名前や年齢をランダムに変更できればいいのです｡
そして､ おそらく18歳以上しかいない私たちのゲームに忍び込んでください｡
では､ 私たちのクラスでプライベート変数を作ることはできるのでしょうか？
さて､ ここからが本題です｡
例えばJavaのような言語では､ プライベート変数を持つことができるものもあります｡
実際にこのように属性がプライベートであると言うことができ､ この方法のようにアクセスしたり修正したりすることができなくなります｡
しかし､ Pythonでは､ 真のプライバシー､ 真のプライベート変数は存在しないのです｡
では､ どうすればいいのか｡
さて､ どうするかというと､ アンダースコア・ネームかアンダースコア・Hにします｡
今すぐ
これは何か特別な力があるのでしょうか？
いや､ これはプログラマーとして､ Pythonプログラマーとして､ コード中にアンダースコアがあったら､
それはプライベート変数である可能性が高いと判断した慣例に過ぎないんだ｡
それを使って､ 例えば､ アンダースコアの名前､ アンダースコアのHを話すとします｡
そして､ これをコメントアウトしよう｡
実行」をクリックすると
まあ､ 今はメソッドになっているので､ これを実行しなければなりません｡
実行をクリックしましょう｡
そして､ 私の名前はアンドレで､ 100歳だとわかった｡
すべてうまくいく｡
しかし､ これらを上書きして実行をクリックしようとすると｡
そして､ これはもうメソッドではないので､ speakを削除して､ 実行をクリックします｡
これは今でも有効です｡
それは､ 先ほども言ったように､ 本当の意味でのプライベート変数が存在しないからです｡
プログラマーとして､ アンダースコアはこれに触れてはいけないという意味だと決めている｡
これには触れないでください｡
悪さをしても､ こういうことをしてもいいんです｡
しかし､ もしあなたがアンダースコアでこれを修正してはいけない､ これはプライベートなものであるべきだと､ 私は前もってお知らせしておきます｡
そして､ これがPythonでプライバシーを実現する方法です｡
私たちは皆､ 「このことは秘密にしておこう」と同意したんです｡
つまり､ あるメソッドや属性をプライベートにしたい場合は､ その前にアンダースコアを付ければいいわけですが､ それは保証の限りではありません｡
このダブルアンダースコアのイニシャルはどうでしょうか？
これもまた､ これからお話しすることですが､ ダンダー方式と呼ばれるものです｡
つまり､ Pythonに組み込まれているのです｡
また､ 通常､ ダンダーのメソッドを自分たちで書くことはありません｡
ダブルアンダースコアは絶対に書きません｡
これを書いてください｡
これらのダブルアンダースコアは､ Pythonでは特別な意味を持っています｡
このような名前がついているのは､ 「もし変数にダブルアンダーコアを書いているなら､ 何か非常に間違ったことをしている」ということを意味しているのです｡
何かを上書きしようとしている｡
もう一度言いますが､ この二重のアンダースコアは､ それぞれのデータ型に対して､ 本当は触ったり修正したりしてはいけないということを知らせるための慣習でもあります｡
仮にリストとします｡
ドットをすれば､ スクロールしていくうちにわかると思います｡
こういうダンダン方式が多いんですね｡
また､ これからお話しすることですが､ これらはお知らせするためのものです｡
アンダースコアのようなことをする場合は､ これらを上書きしないでください｡
アンダースコア､ よくわからないけど､ 先生､ こんな感じ｡
それはまずいですね｡
それを改造して5人に割り当てようとしないでください｡
このプライベートフィールドという考え方が､ Pythonでは重要なんですね｡
そして､ いろいろなものを上書きすることができますが､ それは悪い習慣です｡
しかし､ それを抽象的な表現に戻してみましょう｡
このアイデアは､ このコードを抽象化することです｡ プライベート属性のような適切な規約を使用することで､
コードを変更したり上書きしたりすることができますが､ 抽象化しつつ､ ユーザーが使用するものが私たちのコードを破壊しないようにすることができるのです｡
次回作でお会いしましょう｡
バイバイ｡