Polymorphism lets one function work with different types of data easily. It helps write simple and flexible code.
Polymorphism through functions in Python
Start learning this pattern below
Jump into concepts and practice - no test required
def function_name(parameter): # code that works with different types of parameter if isinstance(parameter, int): # do something for int pass elif isinstance(parameter, str): # do something for str pass else: # default action pass
isinstance().def show(value): if isinstance(value, int): print(f"Number: {value}") elif isinstance(value, str): print(f"Text: {value}") else: print("Unknown type")
def add(a, b): return a + b
This program shows how one function describe can handle different data types and print messages accordingly.
def describe(item): if isinstance(item, int): print(f"This is an integer: {item}") elif isinstance(item, str): print(f"This is a string: '{item}'") elif isinstance(item, list): print(f"This is a list with {len(item)} items") else: print("Unknown type") # Test the function with different types describe(10) describe("hello") describe([1, 2, 3]) describe(3.14)
Polymorphism through functions helps keep code simple and easy to read.
Using isinstance() is a common way to check input types inside a function.
Python also supports polymorphism naturally with operators like + working on numbers and strings.
Polymorphism lets one function work with many data types.
Use isinstance() inside functions to handle different types.
This makes your code flexible and easier to maintain.
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
