Pythonの抽象クラスとは?ABCモジュールを使った設計方法を初心者向けに解説
生徒
「Pythonでクラスを作るときに、必ず作らないといけないメソッドを決めることってできますか?」
先生
「できます。Python(パイソン)では、抽象クラス(チュウショウクラス)という仕組みを使うと、必ず実装してほしいメソッドを決められます。」
生徒
「それはどうやって作るんですか?」
先生
「ABCモジュールを使います。では、基本から順番に見ていきましょう。」
1. 抽象クラスとは何か?
抽象クラス(チュウショウクラス)とは、「設計図だけを持ったクラス」です。実際の処理は書かずに、「このメソッドは必ず作ってください」という約束だけを定義します。
たとえば、家を建てるときの設計図を思い浮かべてください。設計図には、玄関や部屋の配置は書いてありますが、実際の家具までは決まっていません。抽象クラスは、この設計図のような役割を持ちます。
Pythonのオブジェクト指向(シコウ)では、共通ルールを決めるために抽象クラスを使います。
2. ABCモジュールとは?
ABCモジュールとは、「Abstract Base Class(アブストラクト ベース クラス)」の略で、抽象クラスを作るための標準モジュールです。
Pythonには最初から用意されているので、追加インストールは不要です。abcモジュールを使うことで、抽象クラスや抽象メソッドを定義できます。
抽象メソッドとは、「中身を持たないメソッド」のことです。子クラスで必ず実装する必要があります。
3. 抽象クラスの基本的な書き方
まずは、ABCモジュールを使った抽象クラスの基本形を見てみましょう。
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
ABCを継承することで、このクラスは抽象クラスになります。@abstractmethodが付いたメソッドは、必ず子クラスで作らなければなりません。
passは「何もしない」という意味で、処理内容が未定であることを表します。
4. 抽象クラスは直接使えない
抽象クラスは設計図なので、そのままインスタンス(実体)を作ることはできません。
animal = Animal()
TypeError: Can't instantiate abstract class Animal
このエラーは、「抽象クラスはそのまま使えません」という意味です。必ず子クラスを作る必要があります。
5. 子クラスで抽象メソッドを実装する
次に、抽象クラスを継承した子クラスを作ってみましょう。
class Dog(Animal):
def speak(self):
return "ワンワン"
dog = Dog()
print(dog.speak())
ワンワン
このように、抽象メソッドspeakを実装すれば、問題なくインスタンスを作れます。
抽象クラスによって、「必ずspeakメソッドを持つクラス」を保証できています。
6. 抽象メソッドを実装しないとどうなる?
もし抽象メソッドを実装しなかった場合、エラーになります。
class Cat(Animal):
pass
cat = Cat()
TypeError: Can't instantiate abstract class Cat
この仕組みにより、作りかけのクラスやルール違反のクラスを防ぐことができます。
7. 抽象クラスを使うメリット
抽象クラスを使う最大のメリットは、「設計ミスを防げること」です。
複数人で開発する場合でも、「このメソッドは必須」という共通ルールをコードで表現できます。
また、プログラムが大きくなっても、クラスの役割が分かりやすくなり、読みやすいコードになります。
8. 初心者がつまずきやすいポイント
初心者の方がよく混乱するのは、「普通のクラス」と「抽象クラス」の違いです。
普通のクラスは、そのまま使うためのものです。一方、抽象クラスは「ルールを決めるためのクラス」です。
最初は無理に使わず、「共通の形を決めたいとき」に使うものだと覚えておくと理解しやすくなります。