【Python】クラスと__init__を理解する

様々な参考書でクラスは、”オブジェクトの設計図”と説明されることが多い。

クラスはオブジェクトを構成するオブジェクトの性質・属性(クラス変数)や機能・メソッドを一まとめにしたものといえる。

一先ず、適当に属性とメソッドを含むクラスを作成してみる。

作り方と具体例は以下の通り。

class クラス名:
    属性やメソッドなど
class Country:
    name = 'Japan'
    currency = 'JPY'
    def describe(self):
        print(self.name + "'s currency is " + self.currency)

JPN = Country()
JPN.describe() # Japan's currency is JPYと表示
print(JPN.name) # Japanと表示

このようにCountryという名前のクラス(設計図)を作成し、それをもとにJPNというオブジェクトを作成すると、設計図に含まれる属性やメソッドを持ったオブジェクトになる。

これだけでは、汎用性がなく、日本のことだけに対応したクラスであり、使い道はほとんどない。

そこで、属性やメソッドに変更可能な初期値を定め、汎用力のあるクラスを作成する方法がある。

そのために使うのが、__init__とselfからなるインスタンス変数、インスタンス・メソッドである。
このインスタンスは初期値

class Country:
    def __init__(self, name='Japan', currency='JPN'):
        self.name = name
        self.currency = currency
    def describe(self):
        print(self.name + "'s currency is " + self.currency)

AUS = Country('Australia', 'AUD')
print(AUS.currency) # AUDと表示
AUS.describe() # Australia's currency is AUDと表示

上記例では国の名前と通貨名をJapanとJPNを初期値として設定した。

しかし、オーストラリアの情報を引数として渡すことで、設計図の初期値を置き換えてオブジェクトの持つ属性やメソッド内の情報は、指定した引数通りのものとなる。

selfはインスタンスそれ自身を意味しており、それ自身の属性等に引数の情報を与えているイメージ。

※ selfは、selfという名前でなくても機能するが、慣習的にselfが使われている。

以上が基本的なクラスの使い方ですが、複雑である程度の規模のプログラムを作らない趣味でプログラミングをやっているような場合には、使いどころはほとんどないのかなとは思われます。