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における抽象クラスとインターフェースの違いについての概要です。