Автор оригинала: Pankaj Kumar.
Оператор перегрузки в Python
Перегрузка оператора – это феномен подачи альтернативного/разного значения к действию, выполненному оператором за пределы их предопределенной операционной функции. Перегрузка оператора также называется Оператор AD-HOC полиморфизма Отказ
Операторы Python работают для встроенных классов. Но тот же оператор выражает по-разному с разными типами. Например, +
Оператор будет выполнять арифметическое добавление на два числа, объединить два списка и объединять две строки. Python позволяет одному и тому же оператору иметь разные значения в соответствии со ссылкой контекста.
Пример: с изображением различного использования основных арифметических операторов
# Program to show use of # + operator for different purposes. print(5 + 5) # concatenate two strings print("Safa"+"Mulani") # Product two numbers print(10 * 10) # Repeat the String print("Safa"*4)
Выход:
10 SafaMulani 100 SafaSafaSafaSafa
Как перегружать оператора в Python?
Для выполнения оператора перегрузки Python предоставляет некоторую специальную функцию или волшебная функция это автоматически вызывается, когда он связан с этим конкретным оператором. Например, когда мы используем + оператор, магический метод __add__
автоматически вызывается, в котором определена операция для операции +.
Специальные функции в Python
Глобальные функции, которые начинаются с двойного подчеркивания __, называются специальными функциями в Python. Это потому, что они не являются обычными. Функция __init __ (), которую мы обычно определяем и напоминают, как конструктор является одним из них. Он вызывается каждый раз, когда мы создаем новый объект этого класса.
Magic Methods для двоичных операторов в Python
+ | __add __ (Self, Другое) |
– | __sub __ (Self, Другое) |
* | __mul __ (Self, Другое) |
/ | __truediv __ (Self, Другое) |
// | __flooordiv __ (Self, Другое) |
% | __mod __ (Self, Другое) |
** | __Pow __ (Self, Другое) |
Волшебные методы для сравнения операторов в Python
< | __LT __ (Я, Другое) |
> | __GT __ (Я, Другое) |
<= | __le __ (Self, Другое) |
> = | __ge __ (Self, Другое) |
==. | __eq __ (Self, Другое) |
знак равно | __ne __ (Self, Другое) |
Магические методы для операторов назначения в Python
-= | __isub __ (Self, Другое) |
+ = | __адд __ (я, другой) |
знак равно | __imul __ (Я, Другое) |
/= | __Идів __ (Я, Другое) |
//= | __iflooordiv __ (Self, Другое) |
знак равно | __iMod __ (Self, Другое) |
знак равно | __Pow __ (Self, Другое) |
Волшебные методы для Онарных операторов
– | __neg __ (Я, Другое) |
+ | __pos __ (Self, Другое) |
~ | __invert __ (Self, Другое) |
Пример: перегрузка двоичного + оператора в Python
Когда мы используем + оператор, магический метод __add__
автоматически вызывается, в котором определена операция для операции +. Следовательно, путем изменения кода Magic Method Mode, мы можем дать альтернативное значение оператору +.
# Program to overload an binary + operator class X: def __init__(self, x): self.x = x # adding two objects def __add__(self, y): return self.x + y.x ob1 = X(5) ob2 = X(5) ob3 = X("Safa") ob4 = X("Mulani") print(ob1 + ob2) # simple addition of objects print(ob3 + ob4) # concatenation of strings through object addition
Выход :
10 SafaMulani
Пример: перегрузка операторов сравнения в Python
class X: def __init__(self, x): self.x = x def __lt__(self, other): # Overloading < operator if(self.x
Выход :
ob1 is less than ob2 Not equal
Пример: проба программы перегрузки оператора
class Animal: def __init__(self, age): self.__age = age def setage(self, age): self.__age = age def getage(self): return self.__age def __add__(self, predict): return Animal( self.__age + predict.__age ) def __gt__(self, predict): return self.__age > predict.__age def __lt__(self, predict): return self.__age < predict.__age def __str__(self): return "Animal with original age " + str(self.__age) c1 = Animal(5) print(c1.getage()) c2 = Animal(5) print(c2.getage()) c3 = c1 + c2 print(c3.getage()) print( c3 > c2) print( c1 < c2) print(c3)
Выход :
5 5 10 True False Animal with original age 10