Polymorphism is one of the four fundamental principles of Object-Oriented Programming (OOP), alongside Encapsulation, Inheritance, and Abstraction.
The word Polymorphism comes from Greek words:
- Poly = Many
- Morph = Forms
Polymorphism allows the same method, function, or operator to behave differently depending on the object or data it is working with.
In Python, polymorphism makes code more flexible, reusable, and easier to maintain.
What is Polymorphism?
Polymorphism means one interface, many implementations.
A single method name can perform different actions depending on the object that calls it.
Real-World Example
Think of a "Drive" action:
- A Car drives on roads.
- A Boat sails on water.
- An Airplane flies in the sky.
The action is conceptually similar, but the implementation differs.
Why Use Polymorphism?
Polymorphism provides:
- Code flexibility
- Better code reuse
- Simplified maintenance
- Easier scalability
- Cleaner program design
Simple Polymorphism Example
class Dog:
def sound(self):
print("Bark")
class Cat:
def sound(self):
print("Meow")
dog = Dog()
cat = Cat()
dog.sound()
cat.sound()Output
Bark
MeowBoth classes use the same method name (sound()), but produce different results.
Polymorphism with Functions
A function can work with different object types.
Example
class Dog:
def sound(self):
print("Bark")
class Cat:
def sound(self):
print("Meow")
def animal_sound(animal):
animal.sound()
animal_sound(Dog())
animal_sound(Cat())Output
Bark
MeowThe same function works with different objects.
Polymorphism Through Inheritance
Polymorphism is commonly achieved using inheritance.
Parent Class
class Animal:
def sound(self):
print("Animal Sound")Child Classes
class Dog(Animal):
def sound(self):
print("Bark")
class Cat(Animal):
def sound(self):
print("Meow")Using Polymorphism
animals = [Dog(), Cat()]
for animal in animals:
animal.sound()Output
Bark
MeowMethod Overriding and Polymorphism
Method overriding is a major source of polymorphism.
Example
class Vehicle:
def start(self):
print("Vehicle Started")
class Car(Vehicle):
def start(self):
print("Car Started")
class Bike(Vehicle):
def start(self):
print("Bike Started")
vehicles = [Car(), Bike()]
for vehicle in vehicles:
vehicle.start()Output
Car Started
Bike StartedPolymorphism with Built-in Functions
Python's built-in functions are polymorphic.
len() Function
print(len("Python"))
print(len([1, 2, 3, 4]))
print(len((10, 20)))Output
6
4
2The same function works with different data types.
Operator Polymorphism
Operators behave differently depending on operands.
Example
print(5 + 10)
print("Hello " + "World")
print([1, 2] + [3, 4])Output
15
Hello World
[1, 2, 3, 4]The + operator performs:
- Addition
- String concatenation
- List merging
Duck Typing in Python
Python uses a concept called Duck Typing.
Principle
"If it walks like a duck and quacks like a duck, it is a duck."
Python focuses on behavior rather than object type.
Example
class Bird:
def fly(self):
print("Bird Flying")
class Airplane:
def fly(self):
print("Airplane Flying")
def start_flying(obj):
obj.fly()
start_flying(Bird())
start_flying(Airplane())Output
Bird Flying
Airplane FlyingPython only checks whether the object has a fly() method.
Real-World Example: Payment System
class CreditCard:
def pay(self, amount):
print(f"Paid ${amount} using Credit Card")
class PayPal:
def pay(self, amount):
print(f"Paid ${amount} using PayPal")
class BankTransfer:
def pay(self, amount):
print(f"Paid ${amount} using Bank Transfer")
payments = [
CreditCard(),
PayPal(),
BankTransfer()
]
for payment in payments:
payment.pay(100)Output
Paid $100 using Credit Card
Paid $100 using PayPal
Paid $100 using Bank TransferReal-World Example: Employee System
class Employee:
def work(self):
print("Employee Working")
class Developer(Employee):
def work(self):
print("Writing Code")
class Designer(Employee):
def work(self):
print("Creating Designs")
employees = [Developer(), Designer()]
for employee in employees:
employee.work()Output
Writing Code
Creating DesignsReal-World Example: Media Player
class Audio:
def play(self):
print("Playing Audio")
class Video:
def play(self):
print("Playing Video")
files = [Audio(), Video()]
for file in files:
file.play()Output
Playing Audio
Playing VideoTypes of Polymorphism in Python
1. Runtime Polymorphism
Occurs through method overriding.
class Parent:
def show(self):
pass
class Child(Parent):
def show(self):
print("Child Method")2. Duck Typing Polymorphism
Based on object behavior rather than inheritance.
object.method()Python checks whether the method exists.
Advantages of Polymorphism
1. Code Reusability
One interface can support multiple implementations.
2. Flexibility
New classes can be added easily.
3. Easy Maintenance
Changes affect fewer parts of the program.
4. Scalability
Large applications become easier to manage.
Disadvantages of Polymorphism
1. Increased Complexity
Understanding object behavior can take time.
2. Debugging Difficulty
Tracing method calls may be challenging.
3. Overuse Risks
Too much abstraction can make code harder to understand.
Polymorphism vs Inheritance
| Feature | Polymorphism | Inheritance |
|---|---|---|
| Purpose | Many forms of behavior | Reuse code |
| Focus | Method behavior | Class relationships |
| Achieved Through | Overriding, Duck Typing | Parent-child classes |
Common Mistakes
Mistake 1: Different Method Names
❌ Wrong
class Dog:
def bark(self):
pass
class Cat:
def meow(self):
passPolymorphism works best with common method names.
Mistake 2: Forgetting Method Overriding
class Child(Parent):
passNo new behavior is created.
Mistake 3: Assuming Type Matters
Python focuses on behavior, not strict types.
Best Practices
- Use meaningful method names.
- Follow common interfaces.
- Keep overridden methods consistent.
- Use duck typing wisely.
- Avoid unnecessary complexity.
Polymorphism Summary
| Concept | Description |
| Polymorphism | One interface, many forms |
| Method Overriding | Different implementations |
| Duck Typing | Behavior-based programming |
| Runtime Polymorphism | Decided during execution |
| Operator Overloading | Operators with multiple behaviors |
Conclusion
Polymorphism is a powerful OOP concept that allows objects of different classes to be treated through a common interface.
You learned:
- What polymorphism is
- Method overriding
- Duck typing
- Operator polymorphism
- Real-world examples
- Advantages and best practices
Mastering polymorphism will help you write flexible, scalable, and professional Python applications.
Practice Exercises
Exercise 1
Create classes:
- Dog
- Cat
- Bird
Each should have a sound() method and demonstrate polymorphism.
Exercise 2
Create classes:
- Car
- Bike
- Truck
Each should implement a start() method.
Exercise 3
Create a payment processing system using:
- CreditCard
- PayPal
- CryptoPayment
Each class should implement a pay() method.


0 Comments