- Polymorphism in Python
- Example 1: Polymorphism in addition operator
- Function Polymorphism in Python
- Example 2: Polymorphic len() function
- Class Polymorphism in Python
- Example 3: Polymorphism in Class Methods
- Polymorphism and Inheritance
- Example 4: Method Overriding
- Table of Contents
- Полиморфизм в Python
- Что такое полиморфизм?
- Пример 1: полиморфизм оператора сложения
- Полиморфизм функций
- Пример 2: полиморфизм на примере функции len()
- Полиморфизм в классах
- Пример 3: полиморфизм в методах класса
- Полиморфизм и наследование
- Пример 4: переопределение метода
- Python Polymorphism
- Function Polymorphism
- String
- Example
- Tuple
- Example
- Dictionary
- Example
- Class Polymorphism
- Example
- Inheritance Class Polymorphism
- Example
Polymorphism in Python
The literal meaning of polymorphism is the condition of occurrence in different forms.
Polymorphism is a very important concept in programming. It refers to the use of a single type entity (method, operator or object) to represent different types in different scenarios.
Example 1: Polymorphism in addition operator
We know that the + operator is used extensively in Python programs. But, it does not have a single usage.
For integer data types, + operator is used to perform arithmetic addition operation.
num1 = 1 num2 = 2 print(num1+num2)
Hence, the above program outputs 3 .
Similarly, for string data types, + operator is used to perform concatenation.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
As a result, the above program outputs Python Programming .
Here, we can see that a single operator + has been used to carry out different operations for distinct data types. This is one of the most simple occurrences of polymorphism in Python.
Function Polymorphism in Python
There are some functions in Python which are compatible to run with multiple data types.
One such function is the len() function. It can run with many data types in Python. Let’s look at some example use cases of the function.
Example 2: Polymorphic len() function
print(len("Programiz")) print(len(["Python", "Java", "C"])) print(len())
Here, we can see that many data types such as string, list, tuple, set, and dictionary can work with the len() function. However, we can see that it returns specific information about specific data types.
Class Polymorphism in Python
Polymorphism is a very important concept in Object-Oriented Programming.
To learn more about OOP in Python, visit: Python Object-Oriented Programming
We can use the concept of polymorphism while creating class methods as Python allows different classes to have methods with the same name.
We can then later generalize calling these methods by disregarding the object we are working with. Let’s look at an example:
Example 3: Polymorphism in Class Methods
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 . I am 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 . I am 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()
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
Here, we have created two classes Cat and Dog . They share a similar structure and have the same method names info() and make_sound() .
However, notice that we have not created a common superclass or linked the classes together in any way. Even then, we can pack these two different objects into a tuple and iterate through it using a common animal variable. It is possible due to polymorphism.
Polymorphism and Inheritance
Like in other programming languages, the child classes in Python also inherit methods and attributes from the parent class. 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.
Example 4: 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." def __str__(self): return self.name 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) print(b.fact()) print(a.fact()) print(b.area())
Circle I am a two-dimensional shape. Squares have each angle equal to 90 degrees. 153.93804002589985
Here, we can see that the methods such as __str__() , which have not been overridden in the child classes, are used from the parent class.
Due to polymorphism, the Python interpreter automatically recognizes that the fact() method for object a ( Square class) is overridden. So, it uses the one defined in the child class.
On the other hand, since the fact() method for object b isn’t overridden, it is used from the Parent Shape class.
Note: Method Overloading, a way to create multiple methods with the same name but different arguments, is not possible in Python.
Table of Contents
Полиморфизм в Python
В этой статье мы изучим полиморфизм, разные типы полиморфизма и рассмотрим на примерах как мы можем реализовать полиморфизм в Python.
Что такое полиморфизм?
В буквальном значении полиморфизм означает множество форм.
Полиморфизм — очень важная идея в программировании. Она заключается в использовании единственной сущности(метод, оператор или объект) для представления различных типов в различных сценариях использования.
Давайте посмотрим на пример:
Пример 1: полиморфизм оператора сложения
Мы знаем, что оператор + часто используется в программах на Python. Но он не имеет единственного использования.
Для целочисленного типа данных оператор + используется чтобы сложить операнды.
num1 = 1 num2 = 2 print(num1 + num2)
Итак, программа выведет на экран 3 .
Подобным образом оператор + для строк используется для конкатенации.
str1 = "Python" str2 = "Programming" print(str1+" "+str2)
В результате будет выведено Python Programming .
Здесь мы можем увидеть единственный оператор + выполняющий разные операции для различных типов данных. Это один из самых простых примеров полиморфизма в Python.
Полиморфизм функций
В Python есть некоторые функции, которые могут принимать аргументы разных типов.
Одна из таких функций — len() . Она может принимать различные типы данных. Давайте посмотрим на примере, как это работает.
Пример 2: полиморфизм на примере функции len()
print(len("Programiz")) print(len(["Python", "Java", "C"])) print(len())
Здесь мы можем увидеть, что различные типы данных, такие как строка, список, кортеж, множество и словарь могут работать с функцией len() . Однако, мы можем увидеть, что она возвращает специфичную для каждого типа данных информацию.
Полиморфизм в классах
Полиморфизм — очень важная идея в объектно-ориентированном программировании.
Чтобы узнать больше об ООП в Python, посетите эту статью: Python Object-Oriented Programming.
Мы можем использовать идею полиморфизма для методов класса, так как разные классы в Python могут иметь методы с одинаковым именем.
Позже мы сможем обобщить вызов этих методов, игнорируя объект, с которым мы работаем. Давайте взглянем на пример:
Пример 3: полиморфизм в методах класса
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 . I am 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 . I am 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()
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
Здесь мы создали два класса Cat и Dog . У них похожая структура и они имеют методы с одними и теми же именами info() и make_sound() .
Однако, заметьте, что мы не создавали общего класса-родителя и не соединяли классы вместе каким-либо другим способом. Даже если мы можем упаковать два разных объекта в кортеж и итерировать по нему, мы будем использовать общую переменную animal . Это возможно благодаря полиморфизму.
Полиморфизм и наследование
Как и в других языках программирования, в Python дочерние классы могут наследовать методы и атрибуты родительского класса. Мы можем переопределить некоторые методы и атрибуты специально для того, чтобы они соответствовали дочернему классу, и это поведение нам известно как переопределение метода(method overriding).
Полиморфизм позволяет нам иметь доступ к этим переопределённым методам и атрибутам, которые имеют то же самое имя, что и в родительском классе.
Давайте рассмотрим пример:
Пример 4: переопределение метода
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." def __str__(self): return self.name 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) print(b.fact()) print(a.fact()) print(b.area())
Circle I am a two-dimensional shape. Squares have each angle equal to 90 degrees. 153.93804002589985
Здесь мы можем увидеть, что такие методы как __str__() , которые не были переопределены в дочерних классах, используются из родительского класса.
Благодаря полиморфизму интерпретатор питона автоматически распознаёт, что метод fact() для объекта a (класса Square ) переопределён. И использует тот, который определён в дочернем классе.
С другой стороны, так как метод fact() для объекта b не переопределён, то используется метод с таким именем из родительского класса( Shape ).
Заметьте, что перегрузка методов(method overloading) — создание методов с одним и тем же именем, но с разными типами аргументов не поддерживается в питоне.
Python Polymorphism
The word «polymorphism» means «many forms», and in programming it refers to methods/functions/operators with the same name that can be executed on many objects or classes.
Function Polymorphism
An example of a Python function that can be used on different objects is the len() function.
String
For strings len() returns the number of characters:
Example
Tuple
For tuples len() returns the number of items in the tuple:
Example
mytuple = («apple», «banana», «cherry»)
Dictionary
For dictionaries len() returns the number of key/value pairs in the dictionary:
Example
thisdict = <
«brand»: «Ford»,
«model»: «Mustang»,
«year»: 1964
>
Class Polymorphism
Polymorphism is often used in Class methods, where we can have multiple classes with the same method name.
For example, say we have three classes: Car , Boat , and Plane , and they all have a method called move() :
Example
Different classes with the same method:
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
class Boat:
def __init__(self, brand, model):
self.brand = brand
self.model = model
class Plane:
def __init__(self, brand, model):
self.brand = brand
self.model = model
car1 = Car(«Ford», «Mustang») #Create a Car class
boat1 = Boat(«Ibiza», «Touring 20») #Create a Boat class
plane1 = Plane(«Boeing», «747») #Create a Plane class
for x in (car1, boat1, plane1):
x.move()
Look at the for loop at the end. Because of polymorphism we can execute the same method for all three classes.
Inheritance Class Polymorphism
What about classes with child classes with the same name? Can we use polymorphism there?
Yes. If we use the example above and make a parent class called Vehicle , and make Car , Boat , Plane child classes of Vehicle , the child classes inherits the Vehicle methods, but can override them:
Example
Create a class called Vehicle and make Car , Boat , Plane child classes of Vehicle :
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model
class Boat(Vehicle):
def move(self):
print(«Sail!»)
class Plane(Vehicle):
def move(self):
print(«Fly!»)
car1 = Car(«Ford», «Mustang») #Create a Car object
boat1 = Boat(«Ibiza», «Touring 20») #Create a Boat object
plane1 = Plane(«Boeing», «747») #Create a Plane object
for x in (car1, boat1, plane1):
print(x.brand)
print(x.model)
x.move()
Child classes inherits the properties and methods from the parent class.
In the example above you can see that the Car class is empty, but it inherits brand , model , and move() from Vehicle .
The Boat and Plane classes also inherit brand , model , and move() from Vehicle , but they both override the move() method.
Because of polymorphism we can execute the same method for all classes.