サイトのどのお手本を見ても,class()は必ずと言っていいほど登場する.自分もクラスを使いたいんだが,きちんと理解していないので,使えてもdef()どまり.直感的に美しくはないし,クラスを使って書けばもっと良いんだろうなとわかってはいるが,def()を連発すれば実装できないものはないのではという気もしなくはない.
気が向いたので,クラスの必要性について理解するために,いかのサイトで学んだ.
https://snowtree-injune.com/2019/02/11/python-class-necessity/
●自分なりの結論(なぜdefではなく,classを使うのか)
1.クラスを使えば,データ+データに対する操作が可能
2.クラスで生成されたインスタンスに好きな名前を付けることができる
●4つのコードの問題点
上のサイトでは,5つのコードが紹介されていて,より良くなっている(オブジェクト指向型になっている).なんとなく理解しつつあるクラスの必要性を言語化するために,1から順にコードの問題点を考えてみる.
コード1
問題点:
・変数のつけ方がめちゃくちゃ
(太郎という名前を変数aとするのは,一体どういう思考回路している?)
改善策:
・ほかの人が見ても,納得できる変数を定義
コード2
問題点:
・なんとなく長ったらしい
改善策:
共通している部分は.二度書かないようにする
コード3
問題点:
・平均以外の共通項もまとめたらいいのに
改善策:
・共通項すべてをひとまとめにする
コード4
問題点:
・データ(名前~平均点)と平均点の算出処理が,わかれているのがなんか気持ち悪い(ひとまとめにできそう)
改善策:
データとデータに対する処理をひとまとめにする
コード5
まとめ
なんとなくクラスを使ったコードの方が,美しいとは思う.ただ,コード3~5の違いはそれほど大きくないように,初学者の自分には映る.(さすがに,コード1・2が汚い,力技であることは理解できる)今は,期待する出力結果が得られるかどうか,という観点でしか実装できていないが,開発というのはチームプレイであることを考えれば,ほかの人にとっても理解しやすい(美しい)実装を心がけないといけないんだろうなと思う.そのためには,良いコードを見て,それを自分のものにするしかない.このコードは,どれくらい美しいかを教えてくれるツールなどはあるだろうか.そういえば,そんなようなライブラリがあるとか酒井さんが言って張ったような気がするな.