15.Polymorphism
Polymorphism
Polymorphism is the condition of occurrence in different forms.
Opertators
For integer data types, +
operator is used to perform arithmetic addition operation.
For string data types, +
operator is used to perform concatenation.
Thus +
operator shows polymorphism in python.
Functions
print(len("Python"))
print(len(["Python", "Java", "C"]))
print(len({"Name": "Bhavya", "Age": "29"}))
Output:
6
3
2
Class polymorphism
Polymorphism allows different classes to have methods with the same name.
Classes
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age
def info(self):
print(f"I am a cat. My name is {self.name}. I am {self.age} years old.")
def make_sound(self):
print("Meow")
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def info(self):
print(f"I am a dog. My name is {self.name}. I am {self.age} years old.")
def make_sound(self):
print("Bark")
cat1 = Cat("Kitty", 2.5)
dog1 = Dog("Fluffy", 4)
for animal in (cat1, dog1):
animal.make_sound()
animal.info()
animal.make_sound()
Output:
Meow
I am a cat. My name is Kitty. I am 2.5 years old.
Meow
Bark
I am a dog. My name is Fluffy. I am 4 years old.
Bark
In the above example, we have two classes Cat and Dog. They have similar structure and same method names info() and make_sound().
Though we are not linking these classes anywhere, we can pack the two different objects from two different classes as a tuple and iterate through it using a common animal variable. This is poosible due to the concept of polymorphism.
Polymorphism and Inheritance
In python, we can inherit the properties and methods from a parent child with the concept of inheritance. We can redefine certain methods and attributes specifically to fit the child class, which is known as Method Overriding
.
Polymorphism allows us to access these overridden methods and attributes that have the same name as the parent class.
Method Overriding
from math import pi
class Shape:
def __init__(self, name):
self.name = name
def area(self):
pass
def fact(self):
return "I am a two-dimensional shape."
class Square(Shape):
def __init__(self, length):
super().__init__("Square")
self.length = length
def area(self):
return self.length**2
def fact(self):
return "Squares have each angle equal to 90 degrees."
class Circle(Shape):
def __init__(self, radius):
super().__init__("Circle")
self.radius = radius
def area(self):
return pi*self.radius**2
a = Square(4)
b = Circle(7)
print(b.fact())
print(a.fact())
print(b.area())
Output:
I am a two-dimensional shape.
Squares have each angle equal to 90 degrees.
153.93804002589985