Pythonで抽象クラスを使用してインターフェースを実装してみます。
なお、今回はabcモジュールを用います。abcモジュールは、Pythonの標準モジュール・ライブラリとなっていますので、事前にインストールする必要はありません。
■今回の環境(Python)
今回のPythonは、バージョン3.9.16を用いる。(なお、Google Colaboratory(Google Colab)を使用。)
抽象クラスと具象クラスの定義
では、早速抽象クラスを使用してインターフェースを実装するためにコードを書いていきます。
■コード
from abc import ABC, abstractmethod # 抽象クラス(インターフェース)の定義 class Animal(ABC): @abstractmethod def make_sound(self): pass @abstractmethod def move(self): pass # 具象クラスの定義 class Dog(Animal): def make_sound(self): print("ワンワン!") def move(self): print("歩く") class Cat(Animal): def make_sound(self): print("ニャーニャー!") def move(self): print("走る") # メインの実行部分 def main(): animals = [Dog(), Cat()] for animal in animals: animal.make_sound() animal.move() print("------") if __name__ == '__main__': main()
ますは、abcモジュールからABCクラスとabstractmethodデコレータをインポートします。次にAnimalという抽象クラスを定義します。ABCクラスを継承しています。Animalクラス内にはmake_soundとmoveという2つの抽象メソッドがあります。これらのメソッドはサブクラスで実装する必要があります。
次にDogクラスを定義し、Animalクラスを継承します。そしてmake_soundメソッドとmoveメソッドをオーバーライドします。同様に、Catクラスを定義し、Animalクラスを継承します。そしてmake_soundメソッドとmoveメソッドをオーバーライドします。
その後、def文を用いてmain関数を定義します。animalsというリストにDogとCatのインスタンスを格納します。forループを使用して、リスト内の各動物のインスタンスに対して処理を実行します。処理については、make_soundメソッドを呼び出して、動物の音を出力し、moveメソッドを呼び出して、動物の移動方法を表示します。さらに”——“を出力して、各動物の処理が区切られることを示します。
最後にif __name__ == ‘__main__’:を用いてmain関数を実行します。
■実行・検証
このコードセルを保存し、Google Colaboratory上で、セルを実行してみます。
実行してみると、抽象クラスを用いてインターフェースを実装し、サブ(具象)クラスでメソッドをオーバーライドし、各動物の処理が実行され、出力されることを確認できました。この結果より、共通のインターフェースを持つ複数のクラスを扱う際に、一貫性と柔軟性を保つことができることがわかります。
コメント