今回はPythonやJavaを始めとしたオブジェクト指向プログラム言語の本丸である、クラスについてみていきます。
クラスはデータと処理を定義した設計図のようなもので、関数と変数をまとめたものと思ってもいいでしょう。
クラスを使うためには実体化させる必要があり、実体化したものをインスタンスといいます。
また、クラス内で定義する関数のことをメソッドといいます。
良く言われる例えとして、クラスはたい焼きの金型でインスタンスはたい焼きです。
金型を作ってしまえば、たい焼きをいくつでも作ることができるように、クラスを作ってしまえば、インスタンスはいくつでも作ることができます。
クラスの使い方
クラスを定義するには、class文を使います。
クラス内に記述する変数やメソッドは、インデント(字下げ)をする必要があります。
インデントは一般的に連続した空白4個を使います。
class クラス名:
クラスの内容
:
メモ
クラス内で定義する変数名やメソッド名はクラス内で固有になり、他のクラスに同じ名前のものがあっても問題ありません。
実際に簡単なクラスを定義してみましょう。
Calcというクラスの中に、足し算、引き算、掛け算、割り算をするメソッドを定義しています。
1 2 3 4 5 6 7 8 9 |
class Calc: def add(arg1, arg2): print(arg1 + arg2) def sub(arg1, arg2): print(arg1 - arg2) def mul(arg1, arg2): print(arg1 * arg2) def div(arg1, arg2): print(arg1 / arg2) |
クラスを書く時の注意点
クラスを書く時の注意点は、以下のようになります。
注意ポイント
- クラス名は先頭文字は慣習的に大文字にする。
- クラスの後ろに:(コロン)を付ける。
- クラス内の処理にはインデントを付ける。
クラスの実体化
クラスを使うためには、クラスを実体化させる必要があります。
クラスを実体化させることを、インスタンスを生成するといいます。
インスタンスを生成するには、以下のようにします。
インスタンス名 = クラス名()
前述のclass1.pyで定義したクラスを実体化させるには、以下のようにします。
1 |
calc = Calc() |
クラスで使う変数の定義
クラス内で使う変数には、クラス変数とインスタンス変数の2種類あります。
クラス変数はクラスを定義した段階で値が設定され、インスタンス変数はインスタンスを生成した段階で値が設定されます。
クラス変数の使い方
クラス変数の定義は、以下のようになります。
class クラス名:
クラス変数名 = 値
クラス変数を参照するには、インスタンスを生成してから以下のようにします。
インスタンス名.クラス変数名
クラス変数はインスタンス生成後に値を変更することもできます。
インスタンス名.クラス変数名 = 値
以下は、クラス変数を使ったプログラムです。
2、3行目でクラス変数を定義、5行目でインスタンスを生成、7、8行目でクラス変数を参照しています。
10行目でクラス変数の値を変更して、12、13行目で再度クラス変数を参照しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Value: val1 = 100 val2 = 200 value = Value() print(value.val1) print(value.val2) value.val1 = 300 print(value.val1) print(value.val2) |
1 2 3 4 5 |
> python class2.py 100 200 300 200 |
インスタンス変数の使い方
インスタンス変数を定義するには、初期化メソッド「__init()__」を使います。
インスタンス変数の定義は、以下のようになります。
class クラス名:
def __init__(self, 引数2, 引数3, …):
self.インスタンス変数名1 = 引数2
self.インスタンス変数名2 = 引数3
:
メモ
初期化メソッドのことを、コンストラクタ(constructor)ともいいます。
以下は、インスタンス変数を使ったプログラムです。
6行目でインスタンスを生成する時に引数を渡して、3、4行目で渡された引数をインスタンス変数に設定しています。
1 2 3 4 5 6 7 8 9 |
class Value: def __init__(self, arg1, arg2): self.val1 = arg1 self.val2 = arg2 value = Value(100, 200) print(value.val1) print(value.val2) |
1 2 3 |
> python class3.py 100 200 |
メソッドの使い方
メソッドはクラスの中で定義する専用の関数です。
メソッドの定義は、以下のようになります。
class クラス名:
def メソッド名(self, 引数2, 引数3, …):
処理
:
以下は、メソッドを使ったプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Calc: def add(self, arg1, arg2): print(arg1 + arg2) def sub(self, arg1, arg2): print(arg1 - arg2) def mul(self, arg1, arg2): print(arg1 * arg2) def div(self, arg1, arg2): print(arg1 / arg2) calc = Calc() calc.add(7, 5) calc.sub(4, 1) calc.mul(2, 8) calc.div(9, 3) |
1 2 3 4 5 |
> python class4.py 12 3 16 3.0 |
参考として、Python公式サイトのチュートリアルのリンクを貼っておきます。