【Python】クラスの基本的な使い方(コンストラクタ・メソッド・インスタンス)

時計 2020.07.01 / 時計

【Python】クラスの基本的な使い方(コンストラクタ・メソッド・インスタンス)

私はPythonを学び始めた頃は全くクラスを使っていませんでした。

そもそもクラスを使うようなプログラムを作ることがなかったからです。

ですがクラスの使い方がわかるようになってからは、応用が利くようになり、より良いプログラムを作ることができるようになりました。

オブジェクト指向を考えたプログラムの作成や大規模なプログラムを作成する上でクラスは必要不可欠な技術です。

今回はクラスの基本的な使い方(コンストラクタ・メソッド・インスタンス)を解説していきます。

Pythonにおけるクラスについて

クラスとはデータや処理の定義(関数)をまとめたものです。

クラス内での処理の定義をまとめたものはメソッドと呼びます。

このクラスをプログラム内で使うためには「インスタンス」を生成する必要があります。

インスタンスについては後述いたします。

Pythonにおいて、クラスの定義は以下のようにします。

class クラス名:
	#クラス変数の宣言
	def __init__(self):
	    #コンストラクタ処理
	def メソッド名(self):
	    #メソッド処理

クラス名の宣言直下に作成した変数はクラス変数と呼びます。

後述するコンストラクタと呼ばれる__init__メソッドをクラス内に宣言することもできます。

クラス名には「CapWords規約」という命名規約があります。

これは、クラス名の先頭(単語の先頭)は大文字で始めて、名前が複数の単語で作成されるときは、単語の先頭を大文字にしてつなげるというものです。

例えば「OfficeFiveFour」といった具合です。

コンストラクタについて

コンストラクタについては、JavaなどPython以外のプログラムを触っている人はすでにご存じだと思います。

コンストラクタとは、インスタンス生成時に実行されるメソッドです。
インスタンス生成については後述しますが、簡単に説明すると

クラスをプログラムで使えるように実体化(インスタンス化)したときに、自動的に実行されるメソッドです。

コンストラクタは「__init__」という名前で定義し、第一引数には必ず「self」を指定します。

def __init__(self):

selfの後に引数を複数定義することも可能です。

コンストラクタ__init__メソッドのような名前の前後に「__」が付くメソッドは「特殊メソッド」と呼びます。

コンストラクタは主にクラスの初期設定などを行うために使われます。

__init__メソッド内で宣言された変数はインスタンス変数と呼びます。

class OfficeFive:
    def __init__(self):
        self.office = 54    #インスタンス変数officeの宣言
    def print(self):
	      print(self.office)
x = OfficeFive()    #インスタンス生成
x.print()
結果

54

上記プログラムからわかるように、インスタンス変数は変数名の頭にself.を付けて生成します。

self.インスタンス変数名 = 値

クラス内にメソッド(関数)を作成

ここまでで、クラスについて、コンストラクタ(__init__メソッド)についてを解説してきました。

次にここではクラス内でメソッド(関数)を作成する方法を解説します。
これがわかれば、クラス作成の基本はOKです。

メソッドの宣言には__init__と同じようにdefの後にメソッド名を指定します。

def print(self):
    #処理を記述

引数にはselfを必ず指定します。これもコンストラクタ__init__メソッドと同じですね。

第2引数以降に複数の引数をカンマ区切りで指定することもできます。

プログラムでクラス内のメソッドの呼び出し方はインスタンス解説時に説明いたします。

インスタンスとは(生成・初期化)

インスタンスはクラスをプログラム内で使用できるように、クラスを実体化したものです。

インスタンスはひとつのクラスからいくらでも生成できます。

またインスタンス変数と呼ばれる変数を、それぞれのインスタンスは別々に持つことができるようになっています。

インスタンスの生成

上述していますが、クラスをプログラム内で実際に使用するために「インスタンス」を生成する必要があります。

これを「インスタンス化」とも呼びます。

クラスOfficeFiveのインスタンスを生成するサンプルプログラムを以下に示します。

class OfficeFive:
    def __init__(self):
        self.office = 54    #インスタンス変数officeの宣言
    x = OfficeFive()    #インスタンス生成

クラス名に括弧()をつけて変数に代入することでインスタンスを生成することができます。

変数 = クラス名()

クラス内のメソッドを使用するときは、変数.メソッド名()で記述します。

class OfficeFive:
    def __init__(self):
	      self.office = 54    #インスタンス変数officeの宣言
    def print(self):
	      print(self.office)
x = OfficeFive()    #インスタンス生成
x.print()    #クラス内のメソッドを使用

まとめ

クラスの基本的な使い方(クラスについて、コンストラクタ、メソッドの宣言、インストラクタ)について解説してきました。

クラス内の変数である、クラス変数やインスタンス変数は深く触れていませんでしたが、とても重要な変数です。

クラス変数やインスタンス変数についてや、変数の参照・書き換え方法については以下の記事を参照してください。

クラスの使い方をマスターして、オブジェクト指向プログラミングを極めましょう!