Что такое полиморфизм: Слово «полиморфизм» означает наличие множества форм. В программировании полиморфизм означает, что одно и то же имя функции (но разные сигнатуры) используется для разных типов.
Пример встроенных полиморфных функций:
# Python program to demonstrate in-built poly-
# morphic functions
# len() being used for a string
print(len("geeks"))
# len() being used for a list
print(len([10, 20, 30]))
Выход:
5
3
Примеры определяемых пользователем полиморфных функций:
# A simple Python function to demonstrate
# Polymorphism
def add(x, y, z = 0):
return x + y+z
# Driver code
print(add(2, 3))
print(add(2, 3, 4))
Выход:
5
9
Полиморфизм с методами классов:
Приведенный ниже код показывает, как Python может одинаково использовать два разных типа классов. Мы создаем цикл for, который повторяется через кортеж объектов. Затем вызовите методы, не заботясь о том, к какому типу класса относится каждый объект. Мы предполагаем, что эти методы действительно существуют в каждом классе.
class India():
def capital(self):
print("New Delhi is the capital of India.")
def language(self):
print("Hindi is the most widely spoken language of India.")
def type(self):
print("India is a developing country.")
class USA():
def capital(self):
print("Washington, D.C. is the capital of USA.")
def language(self):
print("English is the primary language of USA.")
def type(self):
print("USA is a developed country.")
obj_ind = India()
obj_usa = USA()
for country in (obj_ind, obj_usa):
country.capital()
country.language()
country.type()
Полиморфизм с наследованием:
В Python полиморфизм позволяет нам определять методы в дочернем классе, которые имеют то же имя, что и методы в родительском классе. При наследовании дочерний класс наследует методы от родительского класса. Однако можно изменить метод в дочернем классе, который он унаследовал от родительского класса. Это особенно полезно в тех случаях, когда метод, унаследованный от родительского класса, не совсем соответствует дочернему классу. В таких случаях мы повторно реализуем метод в дочернем классе. Этот процесс повторной реализации метода в дочернем классе известен как Переопределение метода.
class Bird:
def intro(self):
print("There are many types of birds.")
def flight(self):
print("Most of the birds can fly but some cannot.")
class sparrow(Bird):
def flight(self):
print("Sparrows can fly.")
class ostrich(Bird):
def flight(self):
print("Ostriches cannot fly.")
obj_bird = Bird()
obj_spr = sparrow()
obj_ost = ostrich()
obj_bird.intro()
obj_bird.flight()
obj_spr.intro()
obj_spr.flight()
obj_ost.intro()
obj_ost.flight()
Выход:
There are many types of birds.
Most of the birds can fly but some cannot.
There are many types of birds.
Sparrows can fly.
There are many types of birds.
Ostriches cannot fly.
Полиморфизм с функцией и объектами:
Также можно создать функцию, которая может принимать любой объект, учитывая полиморфизм. В этом примере давайте создадим функцию под названием “func ()”, которая будет принимать объект, который мы назовем “obj”. Хотя мы используем имя «obj», любой созданный объект сможет быть вызван в эту функцию. Затем давайте дадим функции какое-нибудь задание, которое использует объект «obj», который мы ей передали. В этом случае давайте назовем три метода, а именно capital (), language() и type (), каждый из которых определен в двух классах «Индия» и «США». Затем давайте создадим экземпляры классов «Индия» и «США», если у нас их еще нет. С их помощью мы можем вызывать их действия, используя ту же функцию func() :
def func(obj):
obj.capital()
obj.language()
obj.type()
obj_ind = India()
obj_usa = USA()
func(obj_ind)
func(obj_usa)
Код: Реализация полиморфизма с помощью функции
class India():
def capital(self):
print("New Delhi is the capital of India.")
def language(self):
print("Hindi is the most widely spoken language of India.")
def type(self):
print("India is a developing country.")
class USA():
def capital(self):
print("Washington, D.C. is the capital of USA.")
def language(self):
print("English is the primary language of USA.")
def type(self):
print("USA is a developed country.")
def func(obj):
obj.capital()
obj.language()
obj.type()
obj_ind = India()
obj_usa = USA()
func(obj_ind)
func(obj_usa)
Выход:
New Delhi is the capital of India.
Hindi is the most widely spoken language of India.
India is a developing country.
Washington, D.C. is the capital of USA.
English is the primary language of USA.
USA is a developed country.