What are abstract base classes in Python, and how are they used?

A deep dive into abstract base classes (ABCs) in Python, exploring their purpose, benefits, and common use cases. …

Updated August 26, 2023



A deep dive into abstract base classes (ABCs) in Python, exploring their purpose, benefits, and common use cases.

What are Abstract Base Classes in Python, and How Are They Used?

Abstract base classes (ABCs) are a powerful feature in Python that allow you to define blueprints for other classes. Think of them as templates that outline the essential methods and properties a class should have, without specifying their exact implementation.

Why are ABCs important?

Imagine you’re building a system with different types of vehicles: cars, motorcycles, trucks. You want each vehicle to have a method for starting its engine, but how they start could vary. A car might use a key, a motorcycle a kickstarter, and a truck a push-button ignition.

ABCs help enforce this structure. You can create an abstract base class called Vehicle with an abstract method start_engine(). Then, when you define classes for Car, Motorcycle, and Truck, you must provide concrete implementations of the start_engine() method specific to each vehicle type.

This approach ensures consistency across your codebase:

  • Enforces Design: ABCs act as contracts, guaranteeing that any class inheriting from them will have the necessary functionality.
  • Code Reusability: Define common logic in the ABC and let subclasses focus on their unique behavior.
  • Improved Readability: Makes your code easier to understand by clearly outlining expectations for different classes.

Let’s illustrate with a simple example:

from abc import ABC, abstractmethod

class Shape(ABC): # Define an Abstract Base Class called 'Shape'
    @abstractmethod  # This decorator marks the method as abstract
    def area(self): 
        pass  

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    def area(self): # Concrete implementation for circle area
        return 3.14 * self.radius ** 2

class Square(Shape):
    def __init__(self, side):
        self.side = side
    def area(self):  # Concrete implementation for square area
        return self.side ** 2

Explanation:

  1. We import ABC and abstractmethod from the abc module.
  2. The Shape class is our ABC. It has an abstract method area(). Abstract methods are declared but have no implementation within the ABC itself. They serve as placeholders that subclasses must fill in.
  3. Circle and Square inherit from Shape. Each class provides a concrete implementation for the area() method, specific to its geometry.

Trying to create an instance of the abstract class Shape directly will raise an error:

s = Shape() # This will throw an error!

Python enforces that you cannot instantiate an ABC; it’s meant purely for defining a template.

Key Takeaways:

Understanding ABCs is crucial for Python developers because they:

  • Promote good object-oriented design principles.
  • Help write cleaner, more maintainable code.
  • Enhance code reusability and flexibility.

Stay up to date on the latest in Computer Vision and AI

Intuit Mailchimp