Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Python・クラス】~メソッド、初期化~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210405111435p:plain

おはようございます!Shotaです。

今日も早速、Pythonに関する記事を書いていきます。

今日も引き続き「クラス」について解説していきます。

 

【目次】

 

メソッド

メソッドは、関数をクラスのメンバとして用意したもので、基本的な書き方は関数の定義と全く同じです。

 

class クラス名:

 def メソッド名(self, 引数):

  ---実行する処理---

 

メソッドも関数も、defの後に名前と引数を記述して定義するという点は全く同じです。ただし、一つだけ違っている点があります。

 

メソッドでは、一つ目の引数は必ずselfとなります。これは省略してはいけません。どんなメソッドも必ず最初にselfという仮引数を用意しておきます。

 

「self」は「このインスタンス自身」を意味しています。クラスはインスタンスを作成します。このインスタンス自身がselfに入れて渡されるのです。selfがわざわざ用意されているのは、インスタンス変数やメソッドなどをそのインスタンスで利用するのに必要だからです。

インスタンス変数は、インスタンスが入っている変数名の横にドットを付けてインスタンス変数名を記述します。つまり、インスタンス変数を利用するには「インスタンスが入っている変数」が必要なのです。そこで、メソッドの第一引数に自身のインスタンスを代入した「self」が渡されるようになっています。

このような仕組みは、サンプルを何回も作って実行しないとわかりません。実際に以下のコードを作って実行してみましょう。

 

#メソッドの定義
class sample:
    message = 'HELLO WORLD'
    def show(self):
        print(self.message)

ob = sample()
ob.message = 'HELLO'
ob.show()

 

▼実行結果

HELLO

 

これを実行すると、「HELLO」というメッセージが表示されます。ここでは、クラス「sample」とそのインスタンスを作り、変数messageに文字列を設定してからsampleインスタンスのshowメソッドを実行しています。

引数selfを使い、self.messageをprint関数で出力しています。これで、sampleクラスのmessageインスタンスの変数を出力していたのです。メソッド内からインスタンス変数を利用するときに引数selfは非常に重要な役割を果たします。 

 

 

初期化

インスタンス変数を使うようになると、

 

インスタンスを作る」

インスタンス変数に値を設定する」

 

というような作業をしてからインスタンスを使うことになります。 インスタンス変数の数が増えてくると、このような初期設定がかなり楽になります。

このようなときに役立つのが初期化メソッドです。Pythonのクラスには、インスタンスを作成したときに必ず呼び出される以下のメソッドが用意されています。

 

def __init__(self):

 ---初期化処理---

 

インスタンスが作成されると、__init__メソッドが自動的に実行されます。このメソッドも、selfを引数にすることは必須です。必要に応じて引数を追加できます。Pythonではこのような特殊なメソッドは_(アンダースコア)を前後に2つ付けます。

 実際に初期化処理をやってみましょう。

 

#initの利用
class sample:
    def __init__(self, msg):
        self.message = msg

    def show(self):
        print(self.message)

ob = sample('Python')
ob.show()

 

▼実行結果

Python

 

 ここでは、クラス変数messageに値を代入するような処理は行っていません。インスタンスを作成するときに、__init__メソッド(「コンストラク」と言います)に引数を指定しているだけです。これで引数の「'Python'」が、sampleクラスのmessage変数に格納されます。

 

sampleクラスを見ると、このように初期化処理が用意されています。

 

def __init__(self, msg):
    self.message = msg

 

__init__メソッドのselfの後に、msgという引数が用意されています。そしてそのmsgの値を、self.messageに設定するようにしておきます。

コンストラクタを実行すると、インスタンスを作成し、そのとき__init__が呼び出されます。このとき、コンストラクタの「'Hello'」が、__init__の仮引数msgに渡されていたことが分かるでしょう。 

 

まとめ

【本日のまとめ】

  •  メソッドは、クラス内に用意される関数。基本的には関数と同じように定義できるが、第一引数には必ずselfを用意する
  • インスタンスの初期化は、__init__メソッドを使う。このメソッドに引数を用意することで、コンストラクタで引数が使えるようになる

 

 

本ブログでは、こんな感じでPythonにまつわる情報や基本的な知識、Pythonの操作方法やニュースをたくさん紹介していきます。毎週日曜日に、普段とは趣向を変えて有名な自己啓発本・ビジネス書を要約・考察するブログを書いていきます。

この記事がいいと思った人はSNSにシェアしてくれると非常に嬉しいです!

明日も昨日に引き続き「クラス」を解説していきます。

今日も最後まで読んでくださりありがとうございました!

 

【参考図書】

gihyo.jp