Object-Oriented Programming: Inheritance
Inheritance in Python
Inheritance is a key feature of object-oriented programming that allows you to create a new class based on an existing class. The new class inherits the attributes and methods of the existing class, allowing you to reuse code and build upon the functionality of the base class. Inheritance promotes code reusability and helps in creating a hierarchy of classes.
In Python, inheritance is implemented using the class
keyword followed by the name of the new class and the name of the base class in parentheses. Here’s the basic syntax for defining a subclass that inherits from a base class:
class BaseClass:
# Base class definition
pass
class SubClass(BaseClass): # SubClass inherits from BaseClass
# Subclass definition
pass
In this example, SubClass
is a subclass that inherits from BaseClass
. The subclass SubClass
can access the attributes and methods of the base class BaseClass
. Let’s look at an example of inheritance in Python.
Example: Inheriting from a Base Class
# Base class
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
# Subclass
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
# Subclass
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
# Create instances of the subclasses
dog = Dog("Buddy")
cat = Cat("Whiskers")
# Call the speak method on the instances
print(dog.speak()) # Output: Buddy says Woof!
print(cat.speak()) # Output: Whiskers says Meow!
In this example, we define a base class Animal
with an abstract method speak
. We then create two subclasses Dog
and Cat
that inherit from the Animal
class. Each subclass implements the speak
method to provide a specific behavior for the animal. We create instances of the subclasses and call the speak
method on each instance to see the output.
Method Overriding
In Python, a subclass can override the methods of the base class by providing a new implementation of the method in the subclass. This is known as method overriding. When a method is called on an instance of the subclass, the overridden method in the subclass is executed instead of the method in the base class. Method overriding allows you to customize the behavior of a method in the subclass without modifying the base class.
Example: Method Overriding
# Base class
class Animal:
def speak(self):
return "Animal speaks"
# Subclass
class Dog(Animal):
def speak(self):
return "Dog barks"
# Subclass
class Cat(Animal):
def speak(self):
return "Cat meows"
# Create instances of the subclasses
cow = Animal()
dog = Dog()
cat = Cat()
# Call the speak method on the instances
print(cow.speak()) # Output: Animal speaks
print(dog.speak()) # Output: Dog barks
print(cat.speak()) # Output: Cat meows
In this example, we define a base class Animal
with a speak
method that returns “Animal speaks”. We then create two subclasses Dog
and Cat
that override the speak
method to return “Dog barks” and “Cat meows” respectively. We create instances of the subclasses and call the speak
method on each instance to see the output. The overridden method in the subclass is executed instead of the method in the base class.
Using the super()
Function
The super()
function is used to call the method of the base class from the subclass. It allows you to access the methods and attributes of the base class in the subclass. The super()
function is commonly used in method overriding to invoke the method of the base class before or after the implementation in the subclass. This ensures that the behavior of the base class is preserved while customizing the behavior in the subclass.
Example: Using the super()
Function
# Base class
class Animal:
def speak(self):
return "Animal speaks"
# Subclass
class Dog(Animal):
def speak(self):
return super().speak() + " and Dog barks"
# Subclass
class Cat(Animal):
def speak(self):
return super().speak() + " and Cat meows"
# Create instances of the subclasses
dog = Dog()
cat = Cat()
# Call the speak method on the instances
print(dog.speak()) # Output: Animal speaks and Dog barks
print(cat.speak()) # Output: Animal speaks and Cat meows
In this example, we define a base class Animal
with a speak
method that returns “Animal speaks”. We then create two subclasses Dog
and Cat
that use the super()
function to call the speak
method of the base class before adding their specific behavior. The super().speak()
call invokes the speak
method of the base class, and the subclass adds “Dog barks” or “Cat meows” to the output. We create instances of the subclasses and call the speak
method on each instance to see the output.
Inheritance, method overriding, and the super()
function are powerful concepts in object-oriented programming that allow you to create flexible and extensible class hierarchies in Python. By using inheritance, you can build upon existing classes, customize their behavior, and create a rich ecosystem of classes that share common attributes and methods.
In the next tutorial, we will explore polymorphism and encapsulation in object-oriented programming, which are essential concepts for building robust and maintainable Python programs. Stay tuned for more Python tutorials! π
Conclusion
In this tutorial, we learned about inheritance in Python, a key feature of object-oriented programming that allows you to create new classes based on existing classes. We explored how to define subclasses that inherit from base classes, override methods in subclasses, and use the super()
function to access the methods of the base class. Inheritance promotes code reusability and helps in creating a hierarchy of classes with shared attributes and methods. By mastering inheritance, you can build flexible and extensible class hierarchies in Python. Experiment with different class structures and inheritance patterns to become more familiar with object-oriented programming concepts.
Happy coding! π