Python polymorphism exercises
Python polymorphism exercises
I apologize for the language restriction earlier! Here are some Python polymorphism exercises:
Exercise 1: Method Overloading
Create a Calculator
class with a method calculate()
that takes different types of arguments and returns the result accordingly.
class Calculator:
def calculate(self, x):
return "x is {}".format(x)
def calculate(self, x, y):
return "x + y = {}".format(x + y)
calculator = Calculator()
print(calculator.calculate(5)) # Output: x is 5
print(calculator.calculate(2, 3)) # Output: x + y = 5
Exercise 2: Method Overriding
Create a Shape
class with a method area()
that calculates the area of different shapes (e.g., rectangle, circle). Then, create two subclasses Rectangle
and Circle
that override the area()
method to calculate their respective areas.
class Shape:
def area(self):
pass
class Rectangle(Shape):
def init(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Circle(Shape):
def init(self, radius):
self.radius = radius
def area(self):
return 3.14 * (self.radius ** 2)
rectangle = Rectangle(4, 5)
circle = Circle(3)
print(rectangle.area()) # Output: 20
print(circle.area()) # Output: 28.26
Exercise 3: Duck Typing
Create a SoundMaker
class that takes an object of any type (e.g., dog, cat) and plays its sound effect.
class SoundMaker:
def make_sound(self, obj):
if hasattr(obj, 'bark'):
print("The dog says 'Woof!'")
elif hasattr(obj, 'meow'):
print("The cat says 'Meow!'")
dog = object()
dog.bark = lambda: "Woof!"
cat = object()
cat.meow = lambda: "Meow!"
sound_maker = SoundMaker()
sound_maker.make_sound(dog) # Output: The dog says 'Woof!'
sound_maker.make_sound(cat) # Output: The cat says 'Meow!'
These exercises demonstrate the power of polymorphism in Python, where objects of different types can be treated uniformly. By using method overloading, overriding, and duck typing, you can write more flexible and reusable code.
If you have any questions or need further clarification on these exercises, feel free to ask!
What is polymorphism in Python with examples?
I'd be happy to explain polymorphism in Python!
Polymorphism is the ability of an object or a function to take on multiple forms. The most common type of polymorphism is method overriding, where a subclass provides a different implementation for the same method as its superclass.
In Python, polymorphism can be achieved through method overriding using inheritance and method overloading using operator overload. Here are some examples:
Method Overriding (Inheritance)
Suppose we have a base class Animal
with a method sound()
, and we want to create a subclass Dog
that also has the same method but with a different implementation.
class Animal:
def sound(self):
print("The animal makes a sound.")
class Dog(Animal):
def sound(self):
print("The dog barks.")
my_dog = Dog()
my_dog.sound() # Output: The dog barks.
In this example, the Dog
class overrides the sound()
method of its superclass Animal
. This is an example of polymorphism because the same method name (sound()
) has a different behavior depending on the object's type.
Method Overloading (Operator Overload)
Polymorphism can also be achieved by overloading operators in Python. For example, let's create a class ComplexNumber
that supports arithmetic operations like addition and multiplication.
class ComplexNumber:
def init(self, real_part, imaginary_part):
self.real = real_part
self.imaginary = imaginary_part
def add(self, other):
return ComplexNumber(self.real + other.real, self.imaginary + other.imaginary)
def mul(self, other):
return ComplexNumber(self.real * other.real - self.imaginary * other.imaginary,
self.real * other.imaginary + self.imaginary * other.real)
a = ComplexNumber(1, 2)
b = ComplexNumber(3, 4)
c = a + b
d = a * b
print(c.real, c.imaginary) # Output: (4, 6)
print(d.real, d.imaginary) # Output: (-1, 10)
In this example, we overload the +
and *
operators to support complex number arithmetic. This is an example of polymorphism because the same operator has a different behavior depending on the object's type.
Function Overloading (Not Supported in Python)
Unfortunately, function overloading is not supported in Python. In languages like C++ or Java, you can define multiple functions with the same name but different parameter types to achieve polymorphism. However, in Python, this is not possible, and you would need to use default values or optional arguments to simulate function overloading.
In conclusion, polymorphism in Python refers to the ability of an object or a function to take on multiple forms, achieved through method overriding using inheritance or operator overload. This allows for more flexible and robust code that can work with different types of objects or data without needing explicit type checks.
I hope this explanation helps you understand polymorphism in Python better!