ゆんの業務改善ブログ

①生産性向上 ②業務改善 ③自動化 について情報発信しています。VBAプログラムは本当の初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。

【Python】クラスの使い方を分かりやすく解説|コンストラクタに引数を渡す

Pythonのクラスの使い方を分かりやすく解説します。クラスやオブジェクトと言った概念を使う理由については【Python】クラスとオブジェクト指向の考え方で詳しく解説しています。

目次

Pytonのクラスの使い方を分かりやすく解説する

クラスの使い方の手順は下記の通りです。

  1. クラス(=機能の設計図)の中身を記述する
  2. インスタンス(=機能の集まったモノ、実態。オブジェクト)を生成する
  3. 利用する

クラスは機能の設計図、インスタンスは機能の集まったモノ、と言う表現でピンと来ない方は、【Python】クラスとオブジェクト指向の考え方を併せてご参照下さい。それでは順に解説していきます。

クラス(=機能の設計図)の中身を記述する

今回実現したい機能は、【時間帯が朝ならBreakfast、昼ならLunch、夜ならDinnerと表示する】と言う機能です。料理の種類を返すクラスなのでクラス名はRyouri、メソッド名はryouri_shuruiとしましょう。ちなみにPythonでは慣習的にクラス名は大文字から始めることになっています。メソッドとはクラスの中に書かれている関数のことです。まずは時間帯が朝で決め打ちの場合を考えます。

class Ryouri():

    def ryouri_shurui(self):

まず、Ryouriクラスにryouri_shuruiメソッドを作りました。メソッド(=クラス内の関数)は必ず引数として自分自身を意味するselfを持ちます。現時点では一旦、おまじないとしてスルーしておきましょう。次にryouri_shuruiの中身を作成します。実装したい機能を復習しておくと、下記の通りです。

【時間帯が朝ならBreakfast、昼ならLunch、夜ならDinnerと表示する】

if文でメソッドの中に実装していきます。

class Ryouri():

    def ryouri_shurui(self):
        jikantai = "morning"
        if jikantai == "morning":
            print("Breakfast")
        elif jikantai == "noon":
            print("Lunch")
        elif jikantai == "night":
            print("Dinner")
        else:
            print("食事の時間ではありません")

jikantaiと言う変数に"morning"を決め打ちで入力しました。


インスタンス(=機能の集まったモノ、実態。オブジェクト)を生成する

クラスは設計図であって、実態がないので、利用するためにはオブジェクトにする必要があります。クラスから生成したオブジェクトのことをインスタンスと言います。インスタンスの作り方は、変数にクラス名を入れるだけです。こうすることで変数にクラスから生成したオブジェクトを入れたことになります。これがインスタンスを生成する、と言う行為です。

ryouri = Ryouri() #インスタンスの生成

これで無事にインスタンスを生成することができました。今後、ryouri をオブジェクトとして利用することができます。

利用する

インスタンスが生成できたらインスタンス.メソッド()の形でインスタンスを利用することができます

ryouri.ryouri_shurui() #クラスを使う 出力結果:Breakfast

無事に使う事ができました。

インスタンス生成と同時に初期化を行う

上記は最もシンプルな例ですが、実用的にはインスタンス生成と同時に初期化を行います。インスタンス生成と同時に自動で一回呼び出されるメソッドのことをコンストラクタと言います。先ほどのRyouriクラスにコンストラクタを追加します。

class Ryouri():

    def __init__(self, abc):
        self.jikantai = abc

    def ryouri_shurui(self):
        if self.jikantai == "morning":
            print("Breakfast")
        elif self.jikantai == "noon":
            print("Lunch")
        elif self.jikantai == "night":
            print("Dinner")
        else:
            print("食事の時間ではありません")

一番大事なところです。__init__という名前のところがコンストラクタです。名前は決まっていて、initの前後にアンダースコア2つずつです。

そして、今回の例ではself以外に1つ引数を取ります。この引数はインスタンスを生成する時に渡されるものです。私が初めて勉強したときに混乱してしまったポイントがあります。それはここで引数を受け取る変数名は一時的なもので、別に何か名の変数名に合わせなくてもよいということです。

具体的には下記の部分です。

    def __init__(self, abc):
        self.jikantai = abc

このコンストラクタはmorning、noon、nightといった文字列を引数として受け取る予定です。それを受け取る変数を「abc」としています。一旦abcという変数で受け取って、それを、自分自身のインスタンスが持っているjikantaiという変数に入れたいのでself.jikantai = abcとしています。よく、ネット上の解説だと、サンプルが下記のようになっています。

    def __init__(self, jikantai ):
        self.jikantai = jikantai 

もちろんこれでOKです。ただ、jikantai に合わせる必要はないということです。受け取る引数名はabcでもxyzでも何でもいいのです。

あとはインスタンスを生成して実際に使てみましょう。

ryouri = Ryouri("noon") #インスタンスの生成
ryouri.ryouri_shurui() #クラスを使う 出力結果:Lunch

<関連記事>