##はじめに
pytorchによる分類をトライする中でClassが出てきた。
テンプレートがあるのでわかってなくても何とか(?)なるかもしれないけど、今後のために少し学んでおこうと思った。
感覚をできるだけ図に落とし込んで少しでもモヤモヤを晴らしていく。
##そもそもClassとは何ぞや?
本やネットの中に、「オブジェクトの設計図」という表記で説明されていることがある。またオブジェクトは関数で定義されるので、データとして存在するだけでなく、自身が動くこともあるとのこと。
上の説明でも雰囲気はつかめるが、まだイメージしにくいので図でまとめてみた。
人間という入れ物の中に、その人を構成するデータが入っている。例えば趣味は「○○すること」というように動作で記録されているので、趣味をやりなさいと指示したら動く感じで捉えられるかも。
##initについて
インスタンス化を実施する時に必要な関数でデータの初期化を行う、というのがよく見る説明。
Classで定義しただけでは設計図のままなので、何か作りたい場合はインスタンス化(実現化)する必要がある。
インスタンス化したけど時には間違えたりすることもあるはず。できたものを再修正するのは面倒だし、修正によっては前の情報が残ってしまうので最初に戻ってきれいにしますと宣言している。
##selfについて
インスタンス自身を指す、とのこと。
インスタンス化した後は更にこの関数を使うというように指定が必要になる。
a = 【Class名】 #インスタンス化
a.【Class内の関数名】 #情報(変数)の呼び出し
この時インスタンス自身も引数として取らないといけないので、実行できるようおまじないとしてselfが使われる(これは決まり)。
メインの方であってなおかつサブ?の引数にもならないといけないなんて複雑。
でも確かに図にしてみると、引数として改めて情報がある方が分かりやすいかもしれない(手のひら返し)。
##super()について
別のクラスの情報を継承できる。
確かに普段の生活でも、一旦作ったプロットを基に新しく作ることはよくある。全部一から書いていたら面倒。そこでsuper()を使うことで簡単にテンプレート化できる。
super()で継承し、テンプレート化したイメージ。ちょっとすっきりした?
##まとめ
イメージを図にすることで少しもやもやはとれたかもしれない。
正しいかどうかは別なのでまだ勉強は継続しないと(説明を読めば読むほど深みにはまっていく気もする…)。
##参考
たくさん参考にさせていただきました。
https://xtech.nikkei.com/atcl/learning/lecture/19/00108/00005/
https://qiita.com/ishigen/items/2d8b6e6398743f2c8110
https://python.ms/class/#%E3%81%AF%E3%81%97%E3%82%99%E3%82%81%E3%81%AB
https://coush.jp/280.html
https://prograshi.com/language/python/py-self-in-class/