いっかくのデータサイエンティストをいく

1からプログラミングとデータサイエンスを独習したい

【備忘録】class<クラス>(Python)

今回はこの本のP136~P157 をもとに書いています。この本の説明がいちばんやさしく、私はこの本しかわかりませんでした。

クラスとは

端的に言うと「データの設計図」といえます。「データの設計図」にはデータがどのようなパラメータを持つか、そしてどのような機能を持っているかについて書かれています。 クラスには関数だけでなく、変数も持つことができます。

クラスのいいところ

クラスのいいところは2つあります。1つ目はプログラムの規模が大きくなった時に、意味のある集合体にしておくことでプログラムを整理できる点です。 2つ目は設計図を量産できる点です。

クラスを作ってみる

class+クラス名をを描き、各行をタブで下げて変数の定義や関数の定義を書きます。

#クラス
class fruit:
    color= 'red'
    def taste(self):
        return 'delicious'
#呼び出し
apple = fruit() #インスタンス化
print(apple.color)
#red
print(taste())
#delicious

クラスをつくるためには

「データの設計図」であるクラスの作り方を学びましょう。

インスタンス

実際の世界では、設計図をもとに製品を作ります。プログラムの世界ではこの設計図からつくられら製品のことをインスタンスといいます。 また、インスタンスにすることをインスタンス化といいます。個人的なイメージですが、.append()などが使える状態、つまり、クラスを利用できる状態にすることなのかなあと思います。 http://info-dts-s.hatenablog.com/entry/2014/01/28/235931

オブジェクト

オブジェクトとは、「データとメソッドがセットになっているもの」といいます。 Pythonではクラスや関数もすべて「オブジェクト」として扱われます。 ※ちなみにメソッドは追加機能のことで、「A.append()」の場合、データ型のAの後ろについているappend()がメソッドに当たります。

メソッドの引数self

クラスの中のメソッドや関数の第一引数にselfというキーワードが必要です。 これは同じクラスにある関数の中の変数をを同じクラス内の別の関数へ変数を呼び出すことができません。 そこでこのselfを使います。self引数はクラス内に定義したどの関数からもクラス内に定義した関数を使えるようになります。

initメソッド

クラスというものは「設計図」で、それをもとに「製品」であるインスタンスをつくります。 その「製品」には初期セ帝が必要な場合があります。 initは必ず使う設定などを初期設定のように定義しておく関数です。

例えば給与計算のクラスの場合

class staff:
    bonus = 30000
    def salary(self):
        salary = 10000 + self.bonus
        return salary

これだと山本さんも花子さんもボーナスが30,000と固定なので

yamamoto = staff()
yamamoto.salary()
#40000
hanako = staff()
hanako.salary()
#40000

とsalary固定になります。 しかし、initでボーナスの指定をできるようにすると

class staff:
    def __init__(self, bonus):
        self.bonus = bonus
    def salary(self):
        salary = 10000 + self.bonus
        return salary
    
yamamoto = staff(10000)
yamamoto.salary()
#20000
hanako = staff(20000)
hanako.salary()
#30000

となります。

参考

https://www.sejuku.net/blog/28182