Pythonで抽象基底クラスを定義し継承する具象クラスを作成し定義してみます。
なお、今回はabcモジュールを用います。abcモジュールは、Pythonの標準モジュール・ライブラリとなっていますので、事前にインストールする必要はありません。
■今回の環境(Python)
今回のPythonは、バージョン3.9.16を用いる。(なお、Google Colaboratory(Google Colab)を使用。)
■抽象基底クラスを定義し継承する具象クラスの作成
では、早速抽象基底クラスを定義し継承する具象クラスを作成するために、コードを書いていきます。
■コード
from abc import ABC, abstractmethod class Animal(ABC): @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.sound()) print(dog.move()) cat = Cat() print(cat.sound()) print(cat.move())
まずは、abcモジュールから ABCクラスと abstractmethod デコレータをインポートします。その後、抽象基底クラスであるAnimalを定義し、その中に抽象メソッドであるsound()とmove()を定義します。抽象メソッドは実装を持たず、派生クラスでオーバーライドする必要があります。そして、抽象基底クラスはABCクラスを継承しており、abstractmethod デコレータを使って抽象メソッドを定義しています。なお、Animalクラスは抽象基底クラスであり、直接インスタンス化することはできません。そのため、Animalクラスをインスタンス化するとTypeErrorが発生します。
次にDogクラスとCatクラスを定義し、Animalクラスを継承します。各クラス内では、抽象メソッド sound()とmove()をオーバーライドして具体的な実装を提供しています。
その後、Dogクラスのインスタンスを作成し、作成されたオブジェクトであるdogに対して(.)ドット演算子を用いてsoundメソッドとmoveメソッドを呼び出します。soundメソッドは “ワンワン!” を返し、moveメソッドは “走る” を返します。返されたものをprint()で出力します。
同様にCatクラスのインスタンスを作成し、、作成されたオブジェクトであるdogに対して(.)ドット演算子を用いてsound メソッドと move メソッドを呼び出します。soundメソッドは “ニャーニャー” を返し、moveメソッドは “ジャンプ” を返します。返されたものをprint()で出力します。
なお、作成されたオブジェクトであるdogとcatは、Animal クラスから継承した抽象メソッドをオーバーライドして具体的な実装を提供しています。
■実行・検証
このコード(セル)を保存し、Google Colaboratory上で、セルを実行してみます。
実行してみると、抽象基底クラスは、共通のインターフェースを定義し、派生クラスで具体的な実装を提供し、実装された結果を出力させることができました。
コメント