LoginSignup
0
2

More than 3 years have passed since last update.

Python はじめから勉強 Hour7:クラスの使い方

Posted at

Python はじめから勉強 Hour7:クラスの使い方

  • Pythonで何かしようとしたときに、まずサンプルスクリプトを探してなんとなく実行してた私が、
  • 自動実行でREST API叩いて、結果の確認、VM操作までやってみたいと思う7時間
  • 既にクラスを「使う」ことはできましたが「設計」についても考え見ましょう

学習資料

過去の投稿

環境

  • Windows
  • Python Ver3系

クラスを使う目的

  • クラスは複雑な処理をきれいにまとめることで、より分かりやすいプログラムを書くための文法です。
  • より分かりやすい=可読性が高い、メンテナンスしやすい、再利用しやすい
  • クラスを使わなくてもコーディングできますが大量の変数と大量の関数が必要になり、努力のわりに報われないことになります。
  • 変数についても「emp_name」を最初は一般社員向けの変数として作っていた(暗黙的に)。そのため役員用に使うと後々のコードでエラーになる場合もあり、開発者が意図しない使い方をされるケースがあります。クラスを使うとプログラムの文法を使って強制的に守らせることができます。

クラスの文法について

  • クラスは以下のような形で作られます。
    • クラスとメソッドの定義
    • データ(インスタンス変数)の定義
  • クラスはインスタンスを作るための設計図で、インスタンスはそこから作られる実体です。そのため、インスタンスにどういう内部データやメソッドをもたせるかをクラスで定義します。
  • ひとまずクラスはこんな感じです(オブジェクト指向な記述方法ではありません)
  • スクリプト内にクラスを定義することはできますが、小さなスクリプトでは良いですが、別ファイルとして作成してメインのスクリプトファイルと分けることをお勧めします。

Importされるファイル(読み込まれる側のファイル)mymodule.py

class MyClass:
    def plus(self, a, b):
        return a + b

    def minus(self, a, b):
        return a - b

Importするファイル(実行される側のファイル ) sample.py

import mymodule             # 読み込むファイルを宣言(拡張子はいらない)

my_ins = mymodule.MyClass()  # MyClassのインスタンス化
a = my_ins.plus(5, 3)        # MyClassのメソッドを使う
print(a)

b = my_ins.minus(5, 3)
print(b)

実行結果

C:\script>sample.py
8
2

C:\script>

クラスを使うプログラム

  • ビンゴゲームのプログラム
  • 1~99の数字をランダムに取り出す(もちろん重複なし)

ビンゴクラス bingo.py

import random
class Bingo:
    def __init__(self):
        self.balls = list(range(1, 100))

    def get_ball(self):
        random.shuffle(self.balls)
        return self.balls.pop()

    def has_ball(self):
        return len(self.balls) !=0

Importするファイル(実行される側のファイル ) bingo_go.py

import bingo

bingo = bingo.Bingo()
while bingo.has_ball():
    print(bingo.get_ball())

実行結果

C:\script>bingo_go.py
71
15
69
5
27
76
・
・
・
# 0~99の値がランダムに取り出される
  • かなりスッキリしたコードになったのではないでしょうか?
  • クラスを作成することで変数やデータの受け渡しが明確になっていると思いますので、余計な変数の値の確認が不要でデバッグも楽だと思います。

今回のまとめ

  • クラスの作成を簡単ですが、整理しました。

  • クラスからインスタンス化することでデータが扱いやすくなりました。

  • オブジェクト指向型のコーディングには程遠いですが、再利用しやすいクラスを作ることができました。

  • どういう動きをしたいかを考えながら設計することで良いクラスができるのかなと

名言・ライトニングトーク用

  • 使い方は分かってきたけど、何かを作るには程遠いような。。。。。。
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2