Abstract Base Classes — define interfaces with enforced method contracts.
1from abc import ABC, abstractmethod23class Shape(ABC):4 @abstractmethod5 def area(self) -> float:6 pass78 @abstractmethod9 def perimeter(self) -> float:10 pass1112 def describe(self) -> str: # concrete method13 return f"Area: {self.area():.2f}"1415class Circle(Shape):16 def __init__(self, radius: float):17 self.radius = radius1819 def area(self) -> float:20 return 3.14159 * self.radius ** 22122 def perimeter(self) -> float:23 return 2 * 3.14159 * self.radius2425# shape = Shape() # TypeError: Can't instantiate abstract class26circle = Circle(5) # OK27print(circle.describe()) # Area: 78.54
Benefits: