<一覧に戻る

抽象クラスと抽象メソッド

Pythonにおける抽象クラスと抽象メソッドは、オブジェクト指向プログラミングにおいて非常に重要な概念です。これらは特に、共通のインターフェースを持つ複数のクラスを設計する際に有用です。

抽象クラスとは?

抽象クラスは、インスタンス化できないクラスであり、他のクラスが継承して具体的な実装を提供するためのベースとなります。抽象クラスは、少なくとも一つの抽象メソッドを持つことが必要です。抽象メソッドは、実装を持たず、サブクラスで必ず実装されることが期待されるメソッドです。

抽象クラスの定義

Pythonでは、abcモジュールを使用して抽象クラスを定義します。以下の手順で抽象クラスと抽象メソッドを作成します。

  1. abcモジュールからABCクラスを継承する。
  2. @abstractmethodデコレーターを使用して抽象メソッドを定義する。

サンプルコード

以下に、抽象クラスと抽象メソッドを使用したサンプルコードを示します。

from abc import ABC, abstractmethod

# 抽象クラスの定義
class Shape(ABC):

    @abstractmethod
    def area(self):
        """面積を計算するメソッド"""
        pass

    @abstractmethod
    def perimeter(self):
        """周囲の長さを計算するメソッド"""
        pass

# CircleクラスはShapeクラスを継承
class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * (self.radius ** 2)

    def perimeter(self):
        return 2 * 3.14 * self.radius

# RectangleクラスはShapeクラスを継承
class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * (self.width + self.height)

# インスタンスを作成
circle = Circle(5)
rectangle = Rectangle(4, 6)

# 面積と周囲の長さを表示
print(f"Circle Area: {circle.area()}")
print(f"Circle Perimeter: {circle.perimeter()}")

print(f"Rectangle Area: {rectangle.area()}")
print(f"Rectangle Perimeter: {rectangle.perimeter()}")

コードの解説

  1. 抽象クラス Shape の定義:
  2. Shapeは抽象クラスで、areaperimeterという2つの抽象メソッドを持っています。これらのメソッドは、サブクラスで必ず実装されなければなりません。

  3. サブクラス CircleRectangle の定義:

  4. CircleRectangleShapeを継承し、それぞれの具体的な実装を提供しています。
  5. Circleクラスでは、半径を使って面積と周囲の長さを計算し、Rectangleクラスでは、幅と高さを使って同様に計算します。

  6. インスタンスの作成とメソッドの呼び出し:

  7. CircleRectangleのインスタンスを作成し、それぞれの面積と周囲の長さを表示しています。

まとめ

抽象クラスと抽象メソッドを使用すると、クラスの設計がスムーズになり、共通のインターフェースを持つ複数のクラスを簡単に管理できます。これにより、コードの再利用性や保守性が向上します。抽象クラスを使うことで、クラスの実装を強制することができ、意図しない実装のミスを防ぐことが可能になります。

出力結果: