ここではオブジェクト指向プログラミングで重要となるクラスを定義する方法について説明します。
クラスを定義する
クラスは変数(クラス変数及びインスタンス変数)とメソッドをもつことができます。インスタンス変数は、クラスから生成されたオブジェクトごとに異なる値を持つことができます。クラス変数は生成されたどのオブジェクトからも共通に使える変数です。また、メソッドとはオブジェクトに紐づけられた関数です。
クラスを定義する書式は次のようになります。:の後にインデントをつけてクラス定義の範囲を指定します。
1 2 3 4 5 6 7 8 9 |
class クラス名: クラス変数の宣言 def __init__(self, 引数1, 引数2, ...): self.インスタンス変数 = 引数1 self.インスタンス変数 = 引数2 ・・・ def メソッド名(self, 引数1, 引数2, ...): 処理 ・・・ |
クラス文の中で定義された関数がメソッドです。__で始まり__で終わるメソッドは特殊なメソッドです。__init__()はオブジェクトを生成する際に自動的に呼ばれるメソッドで、オブジェクトの初期化を行うコンストラクタの役割を果たします。
引数selfには生成されるオブジェクトが渡され、オブジェクトを生成するタイミングでインスタンス変数を初期化することができます。
クラス定義の例
次のプログラムはCatクラスを定義しています。
1 2 3 4 5 6 7 8 9 |
# -*- coding: utf-8 -*- class Cat: str = "I am a cat." # クラス変数 def __init__(self, name, age): # コンストラクタ self.name = name # インスタンス変数 self.age = age # インスタンス変数 def introduce(self): # メソッド print "My name is " + self.name + ". I'm " + self.age + "years old." |
次のように、定義したクラスからオブジェクトを複数作り出すことができます。ここでは、"Tama"や"3"などをコンストラクタに渡しています。
1 2 |
catA = Cat("Tama", "3") # catAオブジェクト(インスタンス)を生成 catB = Cat("Mike", "4") # catBオブジェクト(インスタンス)を生成 |
インスタンス変数には、オブジェクト名.変数名でアクセスします。
1 2 |
print catA.name # Tama (インスタンス変数) print catB.age # Mike(インスタンス変数) |
インスタンス変数は各オブジェクトによって値が異なることがありえますが、どのオブジェクトからでも共通に使いたい変数はクラス変数として定義します。上記では、変数strはクラス変数として宣言されているので、次のようにどのオブジェクトからでも共通して使うことができます。
1 2 |
print catA.str # I am a cat.(クラス変数) print catB.str # I am a cat.(クラス変数) |
最後に、メソッドを呼び出した例です。メソッドの呼び出しには、オブジェクト名.メソッド名を使います。
1 |
catA.introduce() # My name is Tama. I'm 3 years old. |