Skip to main content

Inheritance in Python

let's dive into inheritance in Python, step by step.

What is Inheritance?

Inheritance is a fundamental concept in OOP that allows a class (called a child or derived class) to inherit attributes and methods from another class (called a parent or base class). This helps promote code reuse and can make your programs easier to manage and extend.

 Key Points of Inheritance:

1. **Parent Class (Base Class)**: The class whose attributes and methods are inherited.

2. **Child Class (Derived Class)**: The class that inherits from the parent class.

Why Use Inheritance?

- **Code Reusability**: Reuse existing code without rewriting it.

- **Maintainability**: Easier to manage and update code.

- **Extensibility**: Add new features to existing classes.

Basic Example of Inheritance

Let’s look at a simple example to understand inheritance better.

Step 1: Define a Parent Class

```

class Animal:

    def __init__(self, name):

        self.name = name


    def eat(self):

        print(f"{self.name} is eating.")

```

In this example:

- We have a class `Animal` with an initializer method (`__init__`) that sets the `name` attribute.

- We also have a method `eat` that prints a message.

Step 2: Define a Child Class

```

class Dog(Animal):

    def bark(self):

        print(f"{self.name} says Woof!")

```

In this example:

- The class `Dog` inherits from `Animal` (we indicate this by passing `Animal` in parentheses).

- The `Dog` class adds a new method `bark` but doesn’t need to redefine the `eat` method or the `__init__` method for the `name` attribute because it inherits these from `Animal`.

Step 3: Create an Object of the Child Class

```

my_dog = Dog("Buddy")

my_dog.eat()  # Inherited from Animal

my_dog.bark()  # Defined in Dog

```

Here, `my_dog` is an instance of the `Dog` class. It can use both the `eat` method (inherited from `Animal`) and the `bark` method (defined in `Dog`).


Super() Function

If the child class wants to extend or modify the behavior of the parent class's methods, it can use the `super()` function to call the parent class's methods.

```

class Dog(Animal):

    def __init__(self, name, breed):

        super().__init__(name)

        self.breed = breed


    def bark(self):

        print(f"{self.name}, the {self.breed}, says Woof!")

```

In this example:

- The `Dog` class has its own `__init__` method, which calls the `__init__` method of the `Animal` class using `super()`.

- This ensures that the `name` attribute is set correctly in the parent class, and then the `breed` attribute is set in the `Dog` class.

Method Overriding

A child class can provide a specific implementation of a method that is already defined in its parent class. This is called method overriding.

```

class Cat(Animal):

    def eat(self):

        print(f"{self.name} is eating cat food.")


my_cat = Cat("Whiskers")

my_cat.eat()  # Output: Whiskers is eating cat food.

```

In this example:

- The `Cat` class overrides the `eat` method of the `Animal` class to provide its specific implementation.

Summary

- **Inheritance** allows a child class to reuse the attributes and methods of a parent class.

- **super()** helps in extending the functionality of inherited methods.

- **Method Overriding** allows a child class to provide a specific implementation of a method that is already defined in its parent class.

Inheritance helps in organizing code better and reducing redundancy, making it easier to maintain and extend.

Comments