クラスというのは、関数などのように、そのままクラスからメソッドを呼び出したりして使うわけではありません。クラスを利用するためには、「
インスタンス」というものを作ります。
クラスというのは、いわばプログラムの「
設計図」なのです。これ自体を操作するのではなくて、このクラスという設計図をもとに、実際に利用することのできる部品を作って、それを操作するんですね。この部品がインスタンスなのです。
もし、クラスをそのまま使うとすると、そのクラスの機能をいくつも使いたければ、たくさんクラスを作らないといけなくなります。例えば、サンプルの
Memberクラスを使って、「Taro」と「Hanako」のデータを管理させようとした、と考えてください。クラスをそのまま使うとなると、そのnameに「Taro」と設定したら、もうHanakoは保管できなくなってしまいますね。
そこで、クラスを元に「
インスタンス」という部品を作り、それにTaroと設定してやるのです。Hanakoが必要になったら、またクラスから新しいインスタンスを作って、それにHanakoと設定してやります。こんな具合に、「Memberクラスを使う必要があれば、新しくMemberのインスタンスを作って、名前を設定してやる」のです。こうすれば、このクラスを元に、いくらでもデータを扱えるようになります。
そして、このインスタンス自身を指し示すのに用意されるのが「
self」というわけです。
例えば、あるメソッドの中で、「このインスタンスに保管されているメンバー変数の値を使いたい」と思ったとしましょう。この例で言うなら、
Memberにある
nameの値を、
showmsgの中で使いたい、というときですね。
このとき、ただ「
name」という変数名では使えないのです。「このインスタンスの中にある
name」という形で指定をしてやらないといけません。
そこで、Pythonのクラスに用意されるメソッドでは、必ず最初の引数に、インスタンス自身を示す値が渡されるようになっています。これが「
self」の正体というわけです。この
selfの中にあるメンバー変数やメソッドは、
self.◯◯
このように、
selfの後にドットを付けて指定することができます。例えば、ここでは「
self.name」というようにして
nameメンバー変数を指定し、利用している、というわけです。