Python 3における抽象クラスとインターフェースの違い

PYTHON3 チュートリアル

Python 3における抽象クラスとインターフェースの違い

Python 3では、抽象クラスとインターフェースは異なる概念です。抽象クラスはABC(Abstract Base Class)モジュールを使用して実装され、インターフェースは明示的な構文がないため、抽象クラスとは異なる方法で定義されます。

抽象クラスの例:

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

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

# CircleクラスはShapeクラスを継承しており、areaメソッドを実装しているため正常に動作します。
circle = Circle(5)
print(circle.area())

この例では、Shapeクラスが抽象クラスであり、areaメソッドが抽象メソッドとして定義されています。CircleクラスはShapeクラスを継承し、areaメソッドを実装しています。

インターフェースの例:

from abc import ABC, abstractmethod

class Printable(ABC):
    @abstractmethod
    def print(self):
        pass

class Document:
    def __init__(self, content):
        self.content = content

    def print(self):
        print(self.content)

# DocumentクラスはPrintableクラスのインターフェースを満たしており、printメソッドを実装しているため正常に動作します。
doc = Document("Hello, world!")
doc.print()

この例では、Printableクラスがインターフェースとして定義されています。DocumentクラスはPrintableクラスのインターフェースを満たし、printメソッドを実装しています。

抽象クラスは継承してメソッドを実装することができますが、インターフェースはメソッドの実装を強制するだけで、継承関係は必要ありません。Pythonでは抽象クラスとインターフェースの違いを理解することが重要です。

Python 3における抽象クラスとインターフェースの違いは、主に以下の点にあります。

1. 抽象クラス(Abstract Class)は、一つ以上の抽象メソッド(Abstract Method)を持つクラスであり、その抽象メソッドはサブクラスで実装する必要があります。一方、インターフェース(Interface)は抽象メソッドのみを持ち、具体的な実装は含まれません。

2. Pythonには抽象クラスを定義するための機能が組み込まれており、abcモジュールを使用して抽象基底クラスを作成できます。一方、インターフェースはPythonの標準機能としては提供されていません。

3. 抽象クラスは、通常のクラスと同様に属性やメソッドを持つことができますが、インターフェースは抽象メソッド以外の要素を持つことはできません。

4. Pythonでは、複数の抽象クラスを継承することができますが、複数のインターフェースを継承することはできません。これは、Pythonの多重継承の仕組みによるものです。

以上がPython 3における抽象クラスとインターフェースの違いについての概要です。

購読
通知
0 Comments
Inline Feedbacks
View all comments