Pythonは、オブジェクト指向プログラミング言語の1つです。オブジェクト指向とは、値やそれを扱うためのソースコードをまとめて「オブジェクト(物)」として扱う考え方です。
オブジェクトを表現するために重要な機能が、「クラス」です。クラスは、オブジェクトを生成するときのひな型のようなものです。今回は、クラスについて理解を深めましょう。
クラス
クラスの定義
クラスを定義するための基本的な構文は以下の通りです。
class ClassName:
def __init__(self, 引数2……):
pass
小文字の「class」の後に、好きなクラス名を指定します。関数は「def」というキーワードで定義しましたが、クラスは「class」で定義します。
クラスの内部に、「__init__」という関数が定義されています。これは「コンストラクタ」という、クラスの中でも重要な機能です。
コンストラクタ、メンバ
コンストラクタは、オブジェクト生成時に最初に実行される、「初期化用の特殊な関数」のことです。Pythonでは、コンストラクタは、「_init_()」という名前で定義するのがルールです。
コンストラクタを呼び出すことで、当該のクラスのオブジェクト(「インスタンス」と呼ぶ)を生成できます。コンストラクタは、この生成時に1度だけ実行されます。
コンストラクタの第1引数には、「self」を指定します。「self」は、コンストラクタによって生成されるオブジェクト自身を示しています。コンストラクタを呼び出す際には第1引数を指定する必要はなく、第2引数から記述します。
「メンバ」についても覚えておきましょう。メンバは、クラス内で使用する変数のことです。
例として、「Human」クラスを定義してみます。メンバとして、「name」「year」という変数を用意しています。それぞれ、氏名と年齢を格納する変数です。
# Humanクラスを定義
class Human:
# コンストラクタを定義
def __init__(self, name, year):
# メンバ
self.name = name
self.year = year
なお、Javaなど他のオブジェクト指向言語では、メンバには「プライベート(インスタンス外からアクセスできない)」と「パブリック(インスタンス外からもアクセスできる)」の2種類があるものがあります。しかしPythonでは、メンバは全てパブリック、つまりインスタンス外からアクセス可能です。アクセスを制限したいときは、「プロパティ」という手法を使います。
では、定義したクラスをインスタンスを生成しましょう。 インスタンスを生成する際は、クラス(ここではHuman)を呼び出します。引数には「Kawada」「26」を指定します。
# Humanを呼び出し、human1を作成
human1 = Human("Kawada", 26)
Humanクラスを呼び出すと、Humanクラスのコンストラクタが実行されます。メンバの「name」「year」が初期化され、それぞれに引数として渡された「Kawada」「26」が代入されます。
インスタンスのメンバは、 「(オブジェクト).(変数名)」で参照できます。
# human1のnameを出力(「Kawada」が出力される)
print(human1.name)
# human1のyearを出力(「26」が出力されます)
print(human1.year)
メンバの変更も可能です。
# メンバを書き換え
human1.name = "morimoto"
# human1のnameを出力
print(human1.name)