Free Online Code Editor
Create abstract base classes with ABC.
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())Abstract classes define interface with @abstractmethod. Cannot instantiate directly. Subclasses must implement all abstract methods. Use ABC base class.