Composition is an OOP principle where one object is made up of other objects, i.e., it has instances of other classes as attributes. Composition represents a “has-a” relationship between objects.
Has-A Relationship: This means that an object can contain other objects, which may represent part of its functionality.
Steps
Define classes for both the containing class and the contained class.
Create an instance of the contained class as an attribute in the containing class.
Use the contained object’s methods or attributes from the containing class.
class Engine: def start(self): print("Engine started.")class Car: def __init__(self, brand): self.brand = brand self.engine = Engine() # Car has an engine (Composition) def drive(self): self.engine.start() print(f"The {self.brand} is driving.")car = Car("Toyota")car.drive()