Pythonでクラスメソッド、スタティックメソッド、デザインパターンを用いたプログラムの作成

スポンサーリンク

Pythonでクラスメソッド、スタティックメソッド、デザインパターンを用いたプログラムを作成してみます。

■今回の環境(Python)

Google Colaboratory(Google Colab),2023年3月18日時点ではPython 3.9.16が用いられる。

■クラスメソッド、スタティックメソッド、デザインパターンを用いたプログラムの作成

では、早速クラスメソッド、スタティックメソッド、デザインパターンを用いたプログラムの作成をするために、コードを書いていきます。

■コード

class Animal:
  def __init__(self, name, species):
    self.name = name
    self.species = species

  def make_sound(self):
    pass

class Dog(Animal):
  def make_sound(self):
    return "わんわん!"

class Cat(Animal):
  def make_sound(self):
    return "にゃーにゃー"

class AnimalFactory:
  @staticmethod
  def create_animal(name, species):
    if species == "dog":
      return Dog(name, species)
    elif species == "cat":
      return Cat(name, species)
    else:
      raise ValueError(f"無効な動物: {species}")

dog = AnimalFactory.create_animal("五郎", "dog")
print(dog.make_sound()) 

cat = AnimalFactory.create_animal("タマ", "cat")
print(cat.make_sound())

Animalというオブジェクトを作成するためのテンプレート(設計図)であるクラス(親クラス)を定義します。定義後、クラス内にdef文を用いて’__init__’と記述し、コンストラクタを使います。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。次に第2,第3の引数,パラメータとしてname、speciesを設定します。なお、最初の「self(自己)」という引数,パラメータを介して、「name」、「species」というクラスのインスタンス変数が初期化されます。この時にself(自己)に対してドット演算子( . )を用いて「name」、「species」を指定します。

コンストラクタを設定後、def文を用いてmake_sound()というメソッドを定義します。メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。このメソッドを呼び出した時に実行される処理としては、pass文を用いて何も処理を行わずにスキップするだけというものになります。

次に別のオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。今度は子クラスとなります。今回はDog()というクラスを定義し、括弧内に引数,パラメータとして親クラスのAnimalを渡します。この子クラス内にdef文を用いてmake_sound()というメソッドを定義し、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。このメソッドを呼び出した時に実行される処理としては、returnとして文字列を返すものになります。

同じようにして、オブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。今度も子クラスとなります。今回はCat()というクラスを定義し、括弧内に引数,パラメータとして親クラスのAnimalを渡します。この子クラス内にdef文を用いてmake_sound()というメソッドを定義し、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。このメソッドを呼び出した時に実行される処理としては、returnとして先ほどのものとは異なる文字列を返すものになります。

次に別のオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。今回はAnimalFactoryというクラスを定義します。クラス内にスタティックメソッドを定義するためのデコレーターである”@staticmethod”を用います。今回はdef文を用いてcreate_animal()というメソッドを定義します。括弧内には第1,第2の引数,パラメータとしてname、speciesを設定します。このメソッドが呼び出された時に実行される処理として、if elif else 文を用いてspeciesで受け取った値を比較演算子”==(イコール2つ)”を用いて左辺と右辺が等しいかどうかを比較します。比較された結果で条件に沿った処理が実行されるという処理になります。

クラスを定義後、dogとcatという変数を定義し、その中でAnimalFactoryというクラスに対して(.)ドット演算子を用いてcreate_animal()を呼び出します。この時に括弧内には引数,パラメータとしてname、speciesに受け渡す値を記述します。

記述後、dogとcatという変数に対して(.)ドット演算子を用いてcreate_animal()を呼び出します。これで処理された結果がprint()で出力されます。

■実行・検証

このコード(セル)を保存し、Google Colaboratory上で、セルを実行してみます。

実行してみると、AnimalFactoryというクラス内のメソッドが呼び出され処理が実行し、受け取ったspeciesに応じた各インスタンスがprint()で出力されることを確認しました。

コメント

タイトルとURLをコピーしました