Python

クラスとは何か

By 2021年4月12日No Comments

「クラスって何?」「聞いたことはあるけどよく分からない」

そんな人も多いのではないでしょうか。

教科書などにはよく出てくる単語ですが、実際に使うことは少ないため、なかなか理解が進まないものだと思います。

今回の記事では、クラスについて、出てくる用語についてひとつひとつ説明しながら解説していきます。一度ですべてを理解することは難しいですが、なんとなくどのようなものなのか理解していただければ幸いです。

プログラミング初心者対象!Python入門セミナー

プログラミング初心者がPythonの初歩部分を突破するためのセミナーです。

クラスとは何か

クラスは、車の作り方などの設計図に例えられます。プログラムを組む上で、様々な機能をまとめて扱いたいときがあります。そのような場合、クラスとしてまとめておくことで管理から開発、メンテナンスまで行いやすくなります。

複雑なプログラムを組む場合、クラスはほぼ確実に必要になります。ゲームを製作する場合やWebアプリを作る場合なども基本的にクラスを使ってプログラムが書かれます。

クラスの定義やメソッド、コンストラクタといった知識はPythonを学ぶ上では必須です。

しかし、実際使われるのはゲームを作ったりアプリを作ったりシステムを構築するときが多く、使う必要のないケースがあるのも事実です。単純なプログラムの場合だと、クラスを使ってプログラムを書くことはまれになります。例えば、基本的な計算をプログラムで自動処理させる場合や、Webスクレイピングなどで代表されるデータ収集、他にもメールを自動送信させるような、単純な自動化処理などではクラスがなくても問題なくプログラムを組めることが多いです。

クラスの使い方

まず、“メソッド”と“アトリビュート”という単語を説明します。メソッドは“クラス内の関数”のことを表しています。関数というのはdef文を使って定義するオブジェクトです。アトリビュートは“クラス内の変数”を意味しています。このふたつの単語が出てきたら、クラスの中身についてのことなんだと思ってもらえれば大丈夫です。

クラスを作ることをクラスを定義するといいます。実際にクラスを定義したサンプルコードを用いてメソッドについて学習しましょう。

今回は、テストの点数に関するクラスを定義していきます。ポイントとなる点をコード内にコメントアウトしているので参考にしてください。

class Test_score:  # class  クラス名で定義する。クラス名は慣習的に大文字から           # 始める
    def avg(self):  # メソッドの定義、引数はselfとする
        print((70 + 50) / 2)

クラス内の関数(メソッド)を定義する際には少なくとも1つは引数を入れなければなりません。クラス外の関数では例えば、

def say_hello():
    print('Hello!')
say_hello()
# Hello!

のように引数を指定しなくても関数を定義することが出来ました。メソッドを定義する場合、引数が必要となり、慣習的にselfを引数とします。この引数は、Python内のプログラムを実行する際に使っているものです。理屈が複雑なので、多少強引ですがメソッドの引数にはどんな場合でもselfと書くと覚えてしまいましょう。

クラスを実際に使ってみたいと思いますが、クラスはこのままでは使うことができません。クラスで、クラスから作られたインスタンスを変数に代入してから使います。クラスはインスタンスになって初めて使えるようになります。インスタンスは設計図から作られた製造物と例えられます。英語でも実際に、実体化と訳すことができます。クラスを使えるような状態にすることをインスタンス化、オブジェクト化、オブジェクト生成といいます。インスタンス化のコードは以下のようになります。tanakaのテスト結果をインスタンス化しましょう。

tanaka = Test_score()

次にメソッドの実行方法について説明します。

tanaka.avg()
# 60.0

このようにクラス内のメソッドを実行することができました。

このままでは生徒が変わるごとにメソッドの書き換えが必要になるため、クラスに引数を渡して計算できるようにします。

class Test_score:  
    def avg(self, math, science):  # mathとscienceの引数を渡します
        print((math + science) / 2)  # mathとscienceの平均を出力します

tanaka = Test_score()
tanaka.avg(80, 50)  # 引数を入れてavg()メソッドを実行
# 65.0

このようにクラスに引数を渡すことで、他の生徒のテスト結果の平均を出すこともできます。ただし、この場合にもインスタンス化をする必要があります。

sato = Test_score() # インスタンス化
sato.avg(92, 74)
# 83.0

次にコンストラクタについて説明します。コンストラクタは初期化メソッドとも言います。コンストラクタはインスタンスを生成したときに一度だけ呼び出されるメソッドです。初期化メソッドもメソッドと同じようにdef文で記述します。初期化メソッドでは__init__を使って記述します。

class Test_score:
    def __init__(self):  # class内では引数が必要
        self.name = ""
   
    def avg(self, math, science):
        print((math + science) / 2)

student = Test_score()  # インスタンス化
student.name = "tanaka"
student.avg(50, 0)
# 25.0
student.name = "takeuchi"
student.avg(80, 70)
# 75.0

このように、メソッド、アトリビュート、コンストラクタをクラス内に書き、インスタンス化することでクラスを使うことができます。

まとめ

Pythonのクラスの使い方を用語一つ一つの意味を確認しながら説明しました。大規模なプログラム開発を行うためにはクラスという仕組みはとても重要になるため、基礎的な内容をしっかりと理解しておきましょう。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト

HOSL

Author HOSL

More posts by HOSL