はじめに
Pythonプログラミングを学ぶ中で、抽象クラスという概念に出会ったことはありませんか?
あるいは、「抽象クラス」という言葉を耳にしたけど、具体的に何を指すのかわからないという方もいるかもしれません。
そこで、この記事ではPythonで抽象クラスを理解するための5つのステップを紹介します。
初心者でも分かるように詳細なサンプルコードを交えて、抽象クラスの作り方、使い方、応用例を学びましょう。
●抽象クラスとは
抽象クラスとは、プログラミングの世界でよく用いられる概念であり、具体的な実装を持たないメソッド(これを抽象メソッドと呼びます)を定義するためのクラスです。
これは、「形」としての規約を設定し、その「形」を持った別のクラス(具象クラス)が具体的な実装を担当します。
これにより、プログラムの設計が柔軟になり、またコードの再利用性も向上します。
●Pythonでの抽象クラスの作り方
Pythonで抽象クラスを作成するには、まず抽象メソッドを定義し、その後で抽象クラスを宣言します。
○抽象メソッドの定義
Pythonでは、抽象メソッドはabc
モジュールのabstractmethod
デコレータを使用して定義します。
@abstractmethod
デコレータが付与されたメソッドは、抽象メソッドとなり、子クラスでの実装が強制されます。
このコードではAbstractClassExample
という抽象クラスを作成しています。
この抽象クラスにはdo_something
という抽象メソッドが定義されており、具体的な実装は含まれていません。
○抽象クラスの宣言
抽象クラスを宣言するには、クラス宣言の際にABC
を継承します。
これにより、そのクラスは抽象クラスとなります。既述のサンプルコードがそれに当たります。
●抽象クラスの使い方とサンプルコード
さて、抽象クラスの作り方がわかったところで、実際にどのように使うのか見ていきましょう。
抽象クラスの基本的な使い方と、抽象メソッドの実装について解説します。
○サンプルコード1:抽象クラスの基本的な使い方
抽象クラスは、具体的な処理を持たないメソッド(抽象メソッド)を定義するクラスです。
したがって、抽象クラス自体は直接インスタンス化することはできません。
具体的な実装は、抽象クラスを継承した子クラス(具象クラス)で行います。
下記のコードは、先ほど作成した抽象クラスAbstractClassExample
を継承した具象クラスConcreteClassExample
の例です。
ConcreteClassExample
クラスでは、抽象メソッドdo_something
が具体的に実装されています。
このコードでは、抽象クラスAbstractClassExample
を継承したConcreteClassExample
という具象クラスを作成し、抽象メソッドdo_something
を実装しています。
super().do_something()
を呼び出すことで親クラス(抽象クラス)のメソッドを呼び出しています。
その後、”具象クラスで抽象メソッドの処理を実装しています。”と表示します。
○サンプルコード2:抽象メソッドを実装する
抽象クラスを継承した具象クラスでは、抽象メソッドを必ず実装する必要があります。
これにより、抽象クラスで定義した”形”(メソッド名や引数など)に従って処理を記述することが強制され、コードの統一性が保たれます。
下記のコードでは、do_something
メソッドの実装を行っています。
このコードでは、AbstractClassExample
という抽象クラスを継承したAnotherConcreteClassExample
という具象クラスを作成し、抽象メソッドdo_something
を実装しています。
具体的には、親クラスのdo_something
メソッドを呼び出した後で、”もう一つの具象クラスで抽象メソッドの処理を実装しています。”と表示します。
最後の行では、具象クラスのインスタンスを作成し、do_something
メソッドを呼び出しています。
これを実行すると、画面には”もう一つの具象クラスで抽象メソッドの処理を実装しています。”と表示されます。
●抽象クラスの応用例とサンプルコード
抽象クラスは、一つ以上の抽象メソッドを持つことが可能です。
また、抽象クラスを継承した具象クラスでは、抽象クラスで定義した全ての抽象メソッドを実装する必要があります。
次に、この応用例について見ていきましょう。
○サンプルコード3:複数の抽象メソッドを持つ抽象クラス
抽象クラスでは、複数の抽象メソッドを定義することが可能です。
下記のコードは、2つの抽象メソッドdo_something
とdo_something_else
を持つ抽象クラスAbstractClassMultipleMethods
の例です。
このコードでは、do_something
とdo_something_else
という2つの抽象メソッドを持つ抽象クラスAbstractClassMultipleMethods
を定義しています。
具象クラスでは、これらの抽象メソッド全てを実装する必要があります。
○サンプルコード4:抽象クラスを継承した具象クラスの作成
それでは、先ほど作成した抽象クラスAbstractClassMultipleMethods
を継承した具象クラスConcreteClassMultipleMethods
を作成し、全ての抽象メソッドを実装してみましょう。
このコードでは、抽象クラスAbstractClassMultipleMethods
を継承した具象クラスConcreteClassMultipleMethods
を作成し、2つの抽象メソッドdo_something
とdo_something_else
を実装しています。
具体的には、それぞれのメソッドで”具象クラスでdo_somethingメソッドを実装しています。”と”具象クラスでdo_something_elseメソッドを実装しています。”と表示します。
最後の2行では、具象クラスのインスタンスを作成し、2つのメソッドを呼び出しています。
これを実行すると、それぞれのメソッドで表示したメッセージが表示されます。
●注意点と対処法
Pythonの抽象クラスを使う際には、いくつかの注意点があります。
- 抽象クラスはインスタンスを作成することができません。
抽象クラスを継承した具象クラスを作成し、その具象クラスからインスタンスを作成する必要があります。 - 抽象クラスは、その中に一つ以上の抽象メソッドを持つ必要があります。
具象クラスでは、全ての抽象メソッドを実装しなければなりません。
もし抽象メソッドを実装しない具象クラスを作成しようとすると、エラーが発生します。
これらの注意点は、抽象クラスと抽象メソッドの役割を理解することで対処することができます。
抽象クラスはインターフェースを定義し、具象クラスはそのインターフェースに従って具体的な処理を実装する、という役割分担を理解しておくことが重要です。
まとめ
以上がPythonの抽象クラスの理解の5ステップになります。
まず抽象クラスとは何か、そしてその使い方を紹介しました。
さらに、抽象クラスを継承した具象クラスの作成方法と、複数の抽象メソッドを持つ抽象クラスの作成方法を解説しました。
最後に、抽象クラスを使う際の注意点とその対処法について解説しました。
抽象クラスは、Pythonを使ったオブジェクト指向プログラミングの一部です。
抽象クラスを理解し、適切に使うことで、より再利用性と拡張性の高いコードを書くことが可能になります。
これらの知識を元に、Pythonプログラミングのスキルをさらに磨いていきましょう。