Способы реализации полиморфизма в Python
В программировании полиморфизм - это концепция объектно-ориентированного программирования. Это позволяет использовать единый интерфейс с вводом разных типов данных, разных классов или, возможно, для другого количества вводов.
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 () количество параметров может быть указано вами. Этот процесс вызова одного и того же метода разными способами называется перегрузкой метода .
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. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.