クラスの使い方

 これからクラスの定義のやり方から順に、クラスの使い方について説明していきたいと思います。

 クラスを定義する

 クラスの定義するにはclass文を使います。classに続けて、クラス名を記述します。
クラス定義にはインデントをしたブロックを続けます。ブロックの中にクラスが用いる変数やメゾットを定義します。

# coding: shift-jis

class Animal: ←クラスの名前は、頭文字を大文字にするのが慣習らしいです。
  pass ←何にもしない。

chicken = Animal()

print chicken

raw_input()

出力画面:
 <__main__.Animal instance at 0x000000000000002B>
 classのanimalに対してchickenをインスタンスと呼びます。台本でいうとanimalが役なら、chickenは俳優さんって感じです。演出家が書いた役を俳優さんが演じて初めて実になるって感じです。

 アトリビュートを定義する

 アトリビュートとはクラスが持つ変数です。pythonの特徴の一つですが変数の定義だけをすることはありません。必要なときに定義すればいいという考えなので、代入する際に自動的に定義されます。

# coding: shift-jis

class Animal:
  nakigoe = "コケコッコー"

chicken = Animal()

print chicken.nakigoe

raw_input()

出力画面:
 コケコッコー

 メゾットを定義する

 メゾットと言っても、簡単にいうとクラスが持っている関数みたいなものです。そのため、関数と同じようにdef文を使います。関数と違うところは一つ、1番目の引数を"self"にすることです。"self"とはメゾットの中でインスタンス自体を示すのに使われます。 但し、インスタンスを呼び出すときは"self"を指定する必要がありません。
 メゾットの中でアトリビュート(変数)に値を代入するには、メゾットに渡される"self"を使います。"self"にドットで区切って設定したいアトリビュート名を続けて、代入して使用します。

# coding: shift-jis

class Animal:
  def set_nakigoe(self, nakigoe): ←メゾットの定義時は"self"が必要
    self.nakigoe = nakigoe ←アトリビュートを使う時も"self"が必要

  def get_nakigoe(self):
    print self.nakigoe

dog = Animal()
dog.set_nakigoe("ワンワン") ←メゾットの呼び出し時には"self"は要りません。
dog.get_nakigoe()

raw_input()

出力画面:
 ワンワン
※実はアトリビュートはクラスにくっついているもの全てがアトリビュートなのでメゾットもアトリビュートの一つです。

 インスタンスのイニシャライズ

 イニシャライズとは初期化という意味です。インスタンスを作る際に必ず行うことを言います。インスタンスを作る際に実行する特別メゾットを定義する形で記述します。その特別なメゾットはイニシャライズですから"__init__"と言います。
 慣習として、クラスで扱いたいアトリビュートは、初期化を行うときに代入をしておくようにします。

# coding: shift-jis

class Animal:
  def __init__(self, name, nakigoe):
    self.name = name
    self.nakigoe = nakigoe

  def naku(self):
    print self.name + "が「" + self.nakigoe + "」と鳴きました。"

# 役どころを設定します。
chicken = Animal("ニワトリ","コケコッコー")
cat = Animal("ネコ","ニャーニャー")
dog = Animal("イヌ","ワンワン")
donkey = Animal("ロバ","ヒヒーンヒヒーン")

# 台本部分です。
chicken.naku()
cat.naku()
dog.naku()
donkey.naku()

raw_input()

出力画面:
 ニワトリが「コケコッコー」と鳴きました。
 ネコが「ニャーニャー」と鳴きました。
 イヌが「ワンワン」と鳴きました。
 ロバが「ヒヒーンヒヒーン」と鳴きました。