Рубрики
Без рубрики

Перегрузка оператора Python

Перегрузка оператора Python, что является перегрузкой оператора в Python, пример оператора оператора добавления Python, перегрузка реляционного оператора Python.

Автор оригинала: Pankaj Kumar.

Добро пожаловать в руководство по перегрузке оператора Python. Как мы уже узнали о классе Python, мы собираемся изучить еще одну интересную особенность ориентированного на объект Python.

Перегрузка оператора Python

Перегрузка оператора Python позволяет нам использовать математические, логические и битовые операторы на объектах Python, такими как любой примитивный тип данных.

Например, вы можете легко добавить два номера 3 и 5 с + оператор, I.E 3 + 5. И результат 8.

Но что, если вы хотите добавить два круга (объект класса круга) и сделать круг, имеющий вдвое больше радиуса? Или что, если вы хотите добавить две картезианские точки сетки, чтобы дать еще одну точку с одним и тем же оператором «+»? Перегрузка оператора Python позволяет выполнять операции, такие как те.

Пример перегрузки оператора Python

Теперь давайте посмотрим пример перегрузки математического оператора.

class GridPoint:  #Line: 1, Declaring a class
    def __init__(self, x, y):  
        self.x = x  
        self.y = y  #Line: 4
  
    def __add__(self, other):  # Equivalent of + operator
        return GridPoint(self.x + other.x, self.y + other.y)
  
    def __str__(self):  #Line: 12, returns the attributes when the object is printed
        string = str(self.x)  
        string = string + ", " + str(self.y)  
        return string  #Line: 12
  
point1 = GridPoint(3, 5)  #Line: 14 Creating a grid point
point2 = GridPoint(-1, 4)  #Line: 15, Creating another point
point3 = point1 + point2  #Line: 16, Add two points using __add__() method
print(point3)  #Line: 17, Print the attributes using __str__() method

Строки от 1 до 4 указывают на декларацию класса GridPoint и определение метода конструктора. Давайте посмотрим на линии 6 и 7.

    def __add__(self, other):  # Equivalent of + operator
        return GridPoint(self.x + other.x, self.y + other.y)

Когда мы используем оператор ‘+’ как математическая операция добавления, __add __ () Метод неявно вызывается.

Итак, если мы хотим добавить два объекта классы GridPoine, мы должны повторно определить этот метод. Таким образом, здесь необходимо создать еще один экземпляр класса GridPoint, значение которого X – это суммарное использование x в двух экземплярах Gridpoint вокруг «+» оператора и значение Y также является суммированием Y в двух экземплярах GridPoint вокруг + ‘Оператор.

Строки от 9 до 12 определяют __str __ () Метод, который называется, когда мы пытаемся распечатать объект. Это также встроенный метод. Но мы собираемся перегружать метод, так что он печатает в нашем указанном формате.

Строки 14 и 15, мы создали два объекта GridPoine, а именно Point1 и Point2. Теперь линия наблюдения 16. Два экземпляра класса GridPoint ClassPoint добавляются с использованием оператора ‘+’ и назначаются в качестве другого экземпляра GridPoint. Перегрузка оператора Python помогает вам сделать это. Итак, не удивляйтесь, когда 17-я строка показывает вывод, как под ним изображение.

Список математических операторов

Вот список операторов, которые могут быть перегружены и использоваться с перегрузкой оператора Python аналогичным образом.

Оператор Описание Метод
+ Добавление __add __ (Self, Другое)
Вычитание __sub __ (Self, Другое)
* Умножение __mul __ (Self, Другое)
/ Истинное разделение __truediv __ (Self, Другое)
// Полное разделение __flooordiv __ (Self, Другое)
% Остаток __mod __ (Self, Другое)
** Мощность __Pow __ (Self, Другое)
& Побил и __ и __ (я, другой)
| Побито или __ __ (Я, Другое)
^ Побитовые хорна __кс __ (я, другой)

Перегрузка реляционных операторов в Python

Реляционные операторы перегружены очень похожим образом в Python. Но разница в том, что эти операторы часто возвращают True/false вместо другого экземпляра объекта. Давайте работать с примером.

        
class GridPoint:  
    def __init__(self, x, y):  
        self.x = x  
        self.y = y  
  
    def __gt__(self, other):  # Overloading the greater than operator
        return self.x > other.x  
# Returns true if value of x in the left operand is greater than that in the right one. Returns false otherwise
  
    def __str__(self):  
        string = str(self.x)  
        string = string + ", " + str(self.y)  
        return string  
  
point1 = GridPoint(3, 5)  
point2 = GridPoint(-1, 4)  
if point1 > point2:  # Compares with the overloaded __gt__() method
    print('point1 is greater than point2')  
else:  
    print('point1 is not greater than point2')  

Посмотрите на строку 6, где был загружен оператор «больше, чем». Оператор обычного «>» возвращает true, если операнд в левой части его больше, чем правый. Мы собираемся использовать это свойство для сравнения двух экземпляров классов GridPoint.

Затем в строке 17 мы сравниваем объекты классы GridPoine для получения значения логического типа, которое определит, имеет ли первый объект большего значения «x». В этом случае реляционный оператор возвращает true, поскольку 3 больше, чем -1. В результате Point1 Prints Peadens больше, чем point2 ‘.

Больше реляционных операторов в Python

Вот список реляционных операторов, которые могут быть перегружены таким же образом.

Оператор Описание Метод
> Больше чем __GT __ (Я, Другое)
> = Больше или равно __ge __ (Self, Другое)
< Меньше, чем __LT __ (Я, Другое)
<= Меньше или равно __le __ (Self, Другое)
==. Равно __eq __ (Self, Другое)
знак равно Не равно __ne __ (Self, Другое)

Это все на сегодня о перегрузке оператора в Python. Надеюсь быть с вами с большим количеством уроков очень скоро. Счастливое кодирование!

Ссылка: Python.org Docs.