Pythonでクラスを定義しメソッドのオーバーライドする

スポンサーリンク

Pythonでクラスを定義しメソッドのオーバーライドしてみます。

■今回の環境(Python)

今回のPythonは、バージョン3.9.16を用いる。(なお、Google Colaboratory(Google Colab)を使用。)

■クラスの定義

では、早速Pythonでクラスを定義しメソッドのオーバーライドするために、コードを書いていきます。

■コード

  1. class Animal:
  2.     def make_sound(self):
  3.         print(“動物が音を出す。”)
  4. class Dog(Animal):
  5.     def make_sound(self):
  6.         print(“犬が吠える”)
  7. class Cat(Animal):
  8.     def make_sound(self):
  9.         print(“猫がニャーと鳴く”)
  10. a = Animal()
  11. a.make_sound()
  12. d = Dog()
  13. d.make_sound()
  14. c = Cat()
  15. c.make_sound()

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

次にDogというクラスを定義します。括弧内には引数,パラメータとしてAnimalを設定し、Animalを継承します。このクラスは、定義後、クラス内にdef文を用いてmake_soundというメソッドを定義します。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。メソッドが呼び出された時の処理として、print()を用いて今度は、Animalのクラス内のメソッドで記述したものとは別の日本語の文字列を出力するという処理になります。

次にCatというクラスを定義します。括弧内には引数,パラメータとしてAnimalを設定し、Animalを継承します。このクラスは、定義後、クラス内にdef文を用いてmake_soundというメソッドを定義します。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。メソッドが呼び出された時の処理として、print()を用いて今度もすでに定義したクラス内のメソッドで記述したものとは別の日本語の文字列を出力するという処理になります。

メソッドを定義後、aという変数を定義し、その中でAnimal()を呼び出します。インスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。そして、作成したオブジェクトであるaに対し(.)ドット演算子を用いてmake_sound()にアクセスし呼び出してみます。

同じくdという変数を定義し、その中でDog()を呼び出します。インスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。そして、作成したオブジェクトであるdに対し(.)ドット演算子を用いてmake_sound()にアクセスし呼び出してみます。

さらにcという変数を定義し、その中でCat()を呼び出します。インスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。そして、作成したオブジェクトであるcに対し(.)ドット演算子を用いてmake_sound()にアクセスし呼び出してみます。

■実行・検証

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

実行してみると、メソッドのオーバーライドが行われ、Animalというクラスで既に定義されているメソッドの別の実装をサブクラスであるDogとCatに与え、サブクラスであるDogとCat内で定義したメソッドを呼び出し、それぞれの処理結果を出力させることができました。

コメント

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