Pythonでabcモジュールを使用し抽象基底クラス(Abstract Base Class, ABC)を定義してみます。
なお、abcモジュールはPythonの標準モジュール・ライブラリとなっていますので、事前にインストールする必要はありません。
■今回の環境(Python)
今回のPythonは、バージョン3.9.16を用いる。(なお、Google Colaboratory(Google Colab)を使用。)
■abcモジュールを使用し抽象基底クラス(Abstract Base Class, ABC)を定義する
では、早速abcモジュールを使用し抽象基底クラス(Abstract Base Class, ABC)を定義するためにコードを書いていきます。
■コード
from abc import ABC, abstractmethod class AbstractClass(ABC): @abstractmethod def abstract_method(self): pass @classmethod # @classmethodデコレータでクラスメソッドの実装 @abstractmethod def abstract_classmethod(cls): #クラスメソッドの第1引数,パラメータにはclsを取ります。clsはクラス自身を指す変数。 pass @staticmethod # @staticmethodデコレータでスタティックメソッドの実装 @abstractmethod def abstract_staticmethod(): pass class ConcreteClass(AbstractClass): def abstract_method(self): print("実装されたabstract_method") @classmethod def abstract_classmethod(cls): print("abstract_classmethodを実装しました") @staticmethod def abstract_staticmethod(): print("abstract_staticmethodを実装しました") obj = ConcreteClass() obj.abstract_method() obj.abstract_classmethod() obj.abstract_staticmethod()
まずは、abcモジュールから ABCクラスと abstractmethod デコレータをインポートします。ABC クラスは抽象基底クラスを作成するために使用されます。 その後、AbstractClass クラスを定義し、ABC クラスを継承します。これにより、AbstractClass は抽象クラスとなります。
AbstractClass内に抽象メソッドとしてabstract_method、abstract_classmethod、abstract_staticmethodをそれぞれ定義します。これらのメソッドは、abstractmethod デコレータを使用して抽象メソッドとしてマークされています。抽象メソッドの本体には pass文(何もしない)があります。
次にConcreteClassクラスを定義し、AbstractClass を継承します。これによりConcreteClass は抽象クラスの派生クラスとなります。
ConcreteClass内で抽象メソッドであるabstract_method、abstract_classmethod、abstract_staticmethodをそれぞれ定義します。各抽象メソッドではprint()を用いてそれぞれ異なる日本語を出力させるという処理になります。
最後に、ConcreteClassのインスタンスであるobjを作成します。
作成することで、obj.abstract_method() を呼び出すと、ConcreteClassの実装された abstract_methodメソッドが実行されます。
次にobj.abstract_classmethod() を呼び出すと、ConcreteClass の実装された abstract_classmethodクラスメソッドが実行されます。
さらにobj.abstract_staticmethod() を呼び出すと、ConcreteClass の実装された abstract_staticmethodスタティックメソッドが実行されます。
■実行・検証
このコード(セル)を保存し、Google Colaboratory上で、セルを実行してみます。
実行してみると、ConcreteClassはAbstractClassを継承しており、ConcreteClassのインスタンスを作成すると、抽象メソッドを呼び出し、処理が行われ結果が出力されました。これにより、抽象クラスのメソッドが実装されていることが確認できました。
コメント