Автор оригинала: 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.