What if one function could magically do the right thing for every type of object you give it?
Why Polymorphism through functions in Python? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you have different types of animals, and you want each to make its own sound. Without polymorphism, you might write separate code for each animal type, checking what kind it is every time.
This manual way means lots of repeated code and many if-else checks. It gets confusing and slow to update when you add new animals. Mistakes happen easily because you must remember to handle every type everywhere.
Polymorphism through functions lets you write one function name that works differently depending on the animal. You just call the same function, and each animal knows how to respond. This keeps code clean, simple, and easy to grow.
if animal == 'dog': print('Bark') elif animal == 'cat': print('Meow')
def make_sound(animal):
animal.sound()
make_sound(dog)
make_sound(cat)It enables writing flexible code that works with many types without changing the main logic.
Think of a music app playing different audio files. Polymorphism lets the app call the same play function, but each file type plays correctly without extra checks.
Manual type checks cause repeated and fragile code.
Polymorphism lets one function work with many types smoothly.
This makes programs easier to read, maintain, and extend.
Practice
What does polymorphism through functions mean in Python?
Solution
Step 1: Understand polymorphism concept
Polymorphism means one function can handle different types of inputs.Step 2: Relate to function behavior
In Python, a single function can accept various data types and behave accordingly.Final Answer:
A single function works with different data types -> Option DQuick Check:
Polymorphism = single function, many types [OK]
- Confusing polymorphism with function overloading
- Believing functions accept only one data type
- Mixing polymorphism with inheritance
Which of the following is the correct way to check a variable's type inside a function for polymorphism?
def process(value):
# What to use here?
passSolution
Step 1: Recall Python type checking methods
Using isinstance() is the recommended way to check type in Python.Step 2: Compare options
if isinstance(value, int): uses isinstance(value, int), which correctly checks if value is an int or subclass.Final Answer:
if isinstance(value, int): -> Option CQuick Check:
Use isinstance() for type checks [OK]
- Using 'type() == int' which fails with subclasses
- Using 'is' or '==' incorrectly for type comparison
- Not checking type at all
What is the output of this code?
def describe(value):
if isinstance(value, int):
return f"Integer: {value}"
elif isinstance(value, str):
return f"String: {value}"
else:
return "Unknown type"
print(describe(10))
print(describe('hello'))
print(describe(3.14))Solution
Step 1: Check input 10
10 is int, so returns 'Integer: 10'.Step 2: Check input 'hello'
'hello' is str, so returns 'String: hello'.Step 3: Check input 3.14
3.14 is float, not int or str, so returns 'Unknown type'.Final Answer:
Integer: 10 String: hello Unknown type -> Option AQuick Check:
Type checks match outputs [OK]
- Assuming float is handled like int or str
- Ignoring else case output
- Mixing output order
Find the error in this polymorphic function and fix it:
def process(value):
if isinstance(value, int):
return value * 2
elif isinstance(value, str):
return value + value
else:
return value / 2
print(process('abc'))
print(process([1, 2, 3]))Solution
Step 1: Analyze input 'abc'
String input returns 'abcabc' by concatenation, no error.Step 2: Analyze input [1, 2, 3]
List input goes to else: value / 2, but dividing list by 2 causes TypeError.Step 3: Fix the error
Need to add a check for list type or avoid dividing list by 2.Final Answer:
Error: Cannot divide list by 2; fix by handling list separately -> Option BQuick Check:
List / 2 causes error [OK]
- Assuming all types support division
- Not testing with different input types
- Ignoring TypeError exceptions
Write a polymorphic function combine that accepts either two strings or two lists and returns their concatenation. What is the output of this code?
def combine(a, b):
if isinstance(a, str) and isinstance(b, str):
return a + b
elif isinstance(a, list) and isinstance(b, list):
return a + b
else:
return None
print(combine('Hi, ', 'there!'))
print(combine([1, 2], [3, 4]))
print(combine('Hello', [1, 2]))Solution
Step 1: Check first call combine('Hi, ', 'there!')
Both are strings, so returns concatenation 'Hi, there!'.Step 2: Check second call combine([1, 2], [3, 4])
Both are lists, so returns concatenated list [1, 2, 3, 4].Step 3: Check third call combine('Hello', [1, 2])
Types differ, so returns None.Final Answer:
'Hi, there!' [1, 2, 3, 4] None -> Option AQuick Check:
Type checks control output [OK]
- Not checking both inputs' types
- Trying to combine different types directly
- Returning wrong default for mismatched types
