別のファイルに分けて書くときの話なのですが、selfやinitを書かないといけない、インポートする際にインスタンス化も必要なので、
ファイルにクラスを定義してメソッドなどを定義するよりファイルに直接定義した方が良さそうな気がするのですが、
クラスを定義するメリットをどなたか教えていただけないでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
1つの例。
a = 'abc' print(len(a)) # =>3 b = [1, 2, 3] print(len(b)) # => 3 c = 4, 5, 6 print(len(c)) # =>3 d = {0:0, 1:10, 2:100} print(len(d)) # =>3
と書けます。
文字列だろうとリストだろうとタプルだろうと辞書だろうと、len
に渡せば"要素の長さ"とか"要素の個数"にあたる概念の整数が返ってきますが、これは文字列もリストもタプルも辞書もそのクラスが__len__
というメソッドを実装しているから受けられる恩恵です。
そのメリットを受けられないとしたら
a = 'abc' print(str_len(a)) b = [1, 2, 3] print(list_len(b)) c = 4, 5, 6 print(tuple_len(c)) d = {0:0, 1:10, 2:100} print(dict_len(d))
みたいに、クラスの型によって関数を全部使い分けないといけないです。
投稿2019/01/25 11:00
総合スコア11055
0
ベストアンサー
ファイルにクラスを定義してメソッドなどを定義するよりファイルに直接定義した方が良さそうな気がするのですが、
そういう使い方をするなら、そうなんでしょうとしか言いようがありません。簡単なスクリプトであればクラスにしないで書くことも実際よくありますし。
ただし、オブジェクト指向で書くと(ここでいう「オブジェクト指向」は必ずしもクラスを使うことを意味しません)インスタンスに状態を持たせられる、状態の違うインスタンスを複数作れるので、処理の目的によってはかえって自然に書けます。
- ゲームのキャラクターを表現するためにCharacterクラスを作って、名前とかレベルや攻撃力とか特殊技能なんかはインスタンスごとに与えて管理するとか。
- データベースとのコネクションを1つのオブジェクトに抽象化して、メソッド1つでデータベースを叩けるようにするとか。
- 機械学習で学習したパラメータをモデルの中に保持しておくとか。
- GUI画面の処理で、ボタンとかテキストボックスとかラベルごとにオブジェクトを作るとか。
実践的な例は幾らでもあるのですが、一般的に「メリットって何?」と考えるとかえってわかりづらいかもしれません。むしろ「こういう場面ではクラスで書いた方がすっきりする」と実感する経験を積み重ねていく方が大切かも。
あとはカプセル化、継承、ポリモーフィズムという呪文のように唱えられる3つのキーワードがありますが、いくら考えてもわからないうちはわからないし、どうせいろいろやっているうちにわかるのでそんなに気にしなくて良いです。
そもそも、pythonには組み込みのクラスがたくさんあり、pythonを書いていればその恩恵を日常的に受けています。
int
,float
,list
,tuple
,dict
,range
...いくらでもありますね。
だから逆に自分で書かなくて済む、という側面もあります。
投稿2019/01/25 10:48
編集2019/01/25 10:49総合スコア30933
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/25 11:06