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