Способы реализации полиморфизма в Python

Опубликовано: 9 Апреля, 2022

В программировании полиморфизм - это концепция объектно-ориентированного программирования. Это позволяет использовать единый интерфейс с вводом разных типов данных, разных классов или, возможно, для другого количества вводов.

Example: In this case, the function len() is polymorphic as it is taking a string as input in the first case and is taking a list as input in the second case.

Python3

# length of string
x = len("Geeks")
print(x)
  
# length of list
y = len([1, 2, 3, 4])
print(y)

Выход:

 5
4

В Python полиморфизм - это способ заставить функцию принимать объекты разных классов, если они ведут себя одинаково.

Есть четыре способа реализовать полиморфизм в Python:

1. Утиная типизация . Утиная типизация - это концепция, которая гласит, что «тип» объекта вызывает беспокойство только во время выполнения, и вам не нужно явно указывать тип объекта перед выполнением каких-либо операций с этот объект, в отличие от обычного набора текста, когда пригодность объекта определяется его типом.

In Python, we have the concept of Dynamic typing i.e we can mention the type of variable/object later. The idea is that you don’t need a type in order to invoke an existing method on an object if a method is defined on it, you can invoke it.

Python3

class Geeks1:
  def code (self, ide):
    ide.execute()
      
class Geeks2:
  def execute (self):
    print("GeeksForGeeks is the best Platform for learning")
      
# create object of Geeks2    
ide = Geeks2()
  
# create object of class Geeks1
G1 = Geeks1()
  
# calling the function by giving ide as the arguent.
G1.code(ide)

Выход:

 GeeksForGeeks - лучшая платформа для обучения

2. Перегрузка методов: по умолчанию Python не поддерживает перегрузку методов, но мы можем добиться этого, изменив методы.

Для одной функции sum () количество параметров может быть указано вами. Этот процесс вызова одного и того же метода разными способами называется перегрузкой метода .

Concept of Method overloading 


Python3

class GFG:
    def sum(self, a = None, b = None, c = None):         
        s = 0
        if a != None and b != None and c != None:
            s = a + b + c
        elif a != None and b != None:
            s = a + b
        else:
            s = a
        return s
        
s = GFG()
  
# sum of 1 integer
print(s.sum(1))
  
# sum of 2 integers
print(s.sum(3, 5))
  
# sum of 3 integers
print(s.sum(1, 2, 3))

Выход:

1
8
6

3. Перегрузка оператора : перегрузка оператора в Python - это способность одного оператора выполнять более одной операции в зависимости от класса (типа) операндов. Итак, в основном определение методов для операторов известно как перегрузка операторов. Например: чтобы использовать оператор + с настраиваемыми объектами, вам необходимо определить метод с именем __add__.

Мы знаем, что оператор + используется для сложения чисел и в то же время для объединения строк. Это возможно, потому что оператор + перегружен как классом int, так и классом str . Операторы на самом деле являются методами, определенными в соответствующих классах.

So if you want to use the + operator to add two objects of some user-defined class then you will have to define that behavior yourself and inform Python about that.

Python3

class Student:
    def __init__(self, m1, m2):
        self.m1 = m1
        self.m2 = m2
  
S1 = Student (58, 60)
S2 = Student (60, 58)
  
# this will generate an error
S3 = S1 + S2

Выход:

 TypeError: неподдерживаемые типы операндов для +: 'Student' и 'Student'

So we can see that the + operator is not supported in a user-defined class. But we can do the same by overloading the + operator for our class.

Python3

class Student:
    
    # defining init method for class
    def __init__(self, m1, m2):
        self.m1 = m1
        self.m2 = m2
  
    # overloading the + operator
    def __add__(self, other):
        m1 = self.m1 + other.m1
        m2 = self.m2 + other.m2
        s3 = Student(m1, m2)
        return s3
  
s1 = Student(58, 59)
s2 = Student(60, 65)
s3 = s1 + s2
print(s3.m1)

Выход:

 118

4. Переопределение метода: с помощью переопределения метода класс может «копировать» другой класс, избегая дублирования кода, и в то же время улучшать или настраивать его часть. Таким образом, переопределение метода является частью механизма наследования.

In Python, method overriding occurs by simply defining the child class in a method with the same name as a method in the parent class.

Python3

# parent class
class Programming:
    
    # properties
    DataStructures = True
    Algorithms = True
      
    # function practice
    def practice(self):
        print("Practice makes a man perfect")
      
    # function consistency
    def consistency(self):
        print("Hard work along with consistency can defeat Talent")
          
# child class        
class Python(Programming):
      
    # function 
    def consistency(self):
        print("Hard work along with consistency can defeat Talent.")
  
Py = Python()
Py.consistency()
Py.practice()

Выход:

 Тяжелая работа и последовательность могут победить талант.
Практика делает мужчину идеальным

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.