🏗️

How to Use Abstract Classes in Python

PythonAdvanced

Create abstract base classes with ABC.

Code Example

Python
from abc import ABC, abstractmethod

# Abstract class
class Shape(ABC):
    @abstractmethod
    def area(self):
        pass
    
    @abstractmethod
    def perimeter(self):
        pass
    
    def describe(self):
        return f"I am a {self.__class__.__name__}"

# Concrete classes
class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    
    def area(self):
        import math
        return math.pi * self.radius ** 2
    
    def perimeter(self):
        import math
        return 2 * math.pi * self.radius

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)

# Usage
circle = Circle(5)
rect = Rectangle(4, 6)

print(f"Circle: {circle.describe()}")
print(f"  Area: {circle.area():.2f}")
print(f"  Perimeter: {circle.perimeter():.2f}")

print(f"\nRectangle: {rect.describe()}")
print(f"  Area: {rect.area()}")
print(f"  Perimeter: {rect.perimeter()}")

# Cannot instantiate abstract class
try:
    shape = Shape()
except TypeError as e:
    print(f"\nError: {e}")

# Multiple abstract methods
class Worker(ABC):
    @abstractmethod
    def work(self):
        pass
    
    @abstractmethod
    def eat(self):
        pass

class Employee(Worker):
    def work(self):
        return "Working on project"
    
    def eat(self):
        return "Eating lunch"

emp = Employee()
print(f"\n{emp.work()}")
print(emp.eat())

Explanation

Abstract classes define interface with @abstractmethod. Cannot instantiate directly. Subclasses must implement all abstract methods. Use ABC base class.

Related Tutorials