The "super" method

The `super()` method is used to call a method from a parent class within a subclass. It allows us to access and invoke the methods and attributes of the parent class, enabling you to extend or override their behavior in the subclass.

Let's take an example of a `Vehicle` class and a `Car` subclass to understand how the `super()` method works:

class Vehicle:
    def __init__(self, make, model):
        self.make = make
        self.model = model

    def start_engine(self):
        print("Engine started!")


class Car(Vehicle):
    def __init__(self, make, model, color):
        super().__init__(make, model)
        self.color = color

    def start_engine(self):
        super().start_engine()
        print("Car engine started!")


my_car = Car("Toyota", "Camry", "Blue")
my_car.start_engine()
Engine started!
Car engine started!
In this code, we define a `Vehicle` class with an `__init__` method and a `start_engine` method. We also define a `Car` subclass that inherits from the `Vehicle` class.

In the `Car` subclass, we override the `__init__` method to add a `color` attribute specific to cars. We use the `super()` method in the `__init__` method of the `Car` class to call the `__init__` method of the parent class (`Vehicle`), ensuring that the `make` and `model` attributes are properly initialized.

We also override the `start_engine` method in the `Car` class to extend the behavior of the parent class. We use the `super()` method to call the `start_engine` method of the parent class (`Vehicle`), and then print an additional message specific to cars.

When we create an object of the `Car` class and call the `start_engine` method, the `super()` method allows us to invoke the `start_engine` method of the parent class (`Vehicle`) and extend its behavior in the subclass (`Car`).

The output of the code will be:

```
Engine started!
Car engine started!
```

In this example, the `super()` method enables us to leverage the functionality of the parent class while extending or customizing it in the subclass.

The `super()` method is particularly useful when you want to invoke the methods of the parent class while adding or modifying functionality in the subclass.