Pythonで抽象基底クラスを使って共通の機能を持つ基底クラスを作成し派生クラスでそれぞれの特定の機能を実装してみます。
■今回の環境(Python)
今回のPythonは、バージョン3.9.16を用いる。(なお、Google Colaboratory(Google Colab)を使用。)
■基底クラスと派生クラスの定義
では、早速抽象基底クラスを使って共通の機能を持つ基底クラスを作成し派生クラスでそれぞれの特定の機能を実装するために、コードを書いていきます。
■コード
from abc import ABC, abstractmethod class Animal(ABC): def __init__(self, name): self.name = name @abstractmethod def sound(self): pass @abstractmethod def move(self): pass class Dog(Animal): def sound(self): return "わ~ん!" def move(self): return "走る" class Cat(Animal): def sound(self): return "ミャー" def move(self): return "ジャンプ" dog = Dog("ロッキー") print(dog.name) print(dog.sound()) print(dog.move()) cat = Cat("ミルキー") print(cat.name) print(cat.sound()) print(cat.move())
ますは、abcモジュールからABCクラスとabstractmethodデコレータをインポートします。次に抽象基底クラスAnimalが定義します。このクラスはABCクラスを継承しており、soundメソッドとmoveメソッドが抽象メソッドとして定義されています。抽象メソッドはデコレータ@abstractmethodを使用してマークされており、具象クラスで実装する必要があります。また、Animalクラスで__init__メソッドを用いて、インスタンス化時にname属性を受け取るようにします。
次にDog(犬)クラスとCat(猫)クラスを定義します。この2つのクラスはAnimalクラスを継承しており、抽象メソッドであるsoundメソッドとmoveメソッドを実装しています。
・Dogクラスでは、soundメソッドは”わ~ん!”を返し、moveメソッドは”走る”を返します。
・Catクラスでは、soundメソッドは”ミャー”を返し、moveメソッドは”ジャンプ”を返します。
プログラムの最後では、DogクラスとCatクラスのインスタンスを作成し、それぞれのname属性とsoundメソッド、moveメソッドを呼び出して、print()を用いて犬と猫の情報を表示します。
■実行・検証
このコードセルを保存し、Google Colaboratory上で、セルを実行してみます。
セルを実行してみると、抽象基底クラスを使って共通のインターフェースを定義し、派生クラスがそのインターフェースを実装し、それぞれの派生クラスのメソッドを呼び出し、処理結果を出力させることができました。
コメント