Overriding Methods in Python
Method overriding in Python allows a subclass to provide a specific implementation of a method that is already defined in its parent class. It is a key feature of object-oriented programming and enables polymorphism, which allows you to use the same method name in different classes with unique behaviors.
Example 1: Basic Method Overriding
In this example, we create a parent class Animal with a method speak(). The subclass Dog overrides the speak() method to provide a specific implementation.
class Animal:
def speak(self):
return "Animal speaks"
class Dog(Animal):
def speak(self):
return "Dog barks"
# Example usage
animal = Animal()
dog = Dog()
print(animal.speak()) # Output: Animal speaks
print(dog.speak()) # Output: Dog barks
Example 2: Overriding with Additional Behavior
In this example, the subclass calls the parent class method using super() and adds additional behavior to it.
class Animal:
def speak(self):
return "Animal speaks"
class Cat(Animal):
def speak(self):
original_speak = super().speak()
return f"{original_speak} and Cat meows"
# Example usage
cat = Cat()
print(cat.speak()) # Output: Animal speaks and Cat meows
Example 3: Constructor Overriding
Constructors (__init__ methods) can also be overridden in subclasses. Here's an example:
class Animal:
def __init__(self, name):
self.name = name
class Bird(Animal):
def __init__(self, name, can_fly):
super().__init__(name)
self.can_fly = can_fly
# Example usage
bird = Bird("Sparrow", True)
print(bird.name) # Output: Sparrow
print(bird.can_fly) # Output: True
Key Points
- Method overriding occurs when a subclass has a method with the same name as a method in its parent class.
- Use the super() function to call the parent class method inside the overridden method if needed.
- Overriding allows a subclass to provide specific behavior for inherited methods.
Conclusion
Method overriding is a powerful feature in Python that promotes code reuse and enables polymorphism. It is widely used in object-oriented programming to implement specific behaviors in subclasses while maintaining a common interface in the parent class.