Например, оператор + может математически сложить два числа, объединить два списка или объединить строки. Вот простая программа на Python, чтобы показать проблеск оператора +, используемого для сложения и конкатенации.
А что будет, если мы будем использовать эти операторы для объектов в определяемые пользователем класс? Возьмем следующую программу, которая пытается смоделировать пятно на двумерной схеме размеров. Ниже вы уже можете видеть, что, поскольку Python не понимал, как объединить 2 экземпляра координат, Тип ошибки генерируется.
Эту задачу в Python можно выполнить с помощью перегрузки оператора, но в первую очередь разберемся со специальными методами.
Особые магические методы
Методы класса, начинающиеся с двойное подчеркивание классифицируются в Python как специальные методы или магические функции. Функции, которые используются для выполнения определенных действий. Обычные методы, которые мы описываем для класса, не являются такими функциями. Одним из них будет __в этом_() функция, о которой мы упоминали выше. Каждый раз, когда мы создаем новый объект в этом классе, он называется. Мы сделаем наш класс совместимым со встроенными функциями с помощью магических функций. В Python есть несколько других специальных функций.
Двоичные или математические операторы
Вот подробности волшебных функций для перегрузки двоичных или математических операторов Python.
Операторы отношения или сравнения
Ниже приведены подробные сведения о магических функциях для перегрузки операторов сравнения или сравнения Python.
Операторы присваивания
Вот подробности некоторых волшебных функций для перегрузки операторов присваивания в коде Python.
Теперь пришло время взглянуть на пару примеров кода, когда мы используем магические методы, упомянутые выше, и перегружаем определенные операторы.
Перегрузите двоичные или математические операторы
Пример 01: Оператор сложения
Вам придется обеспечить соблюдение __Добавлять_() в классе, чтобы перегрузить + оператор. Великий долг приходит с большой силой. Внутри этого метода вы можете делать все, что захотите. Но гораздо рациональнее вернуть 'Coord ' объект координатной суммы.
Когда вы пробовали c1 + c2, Python на самом деле называет свою магию .__add __ () как c1.__add __ (c2) или Coord.__добавить __ (c1, c2).
Пример 02: Оператор умножения
Точно так же вы можете даже перегрузить несколько бинарных операторов, используя магические функции. В том же примере выше при перегрузке оператора умножения мы получаем 2, 6 как наш ответ на волшебную функцию.
Пример 03: Оператор вычитания
Используя оператор вычитания, мы получили -1, -1 как наш ответ.
Пример 04: Оператор мощности
Мы перегрузили мощность оператор при использовании функции power magic; у нас есть 1, 8.
Пример 05: Оператор модуля
Перегружая оператор модуля, мы использовали __mod__ магическая функция для получения модуля.
Вы также можете использовать другие математические операторы, e.грамм., деление и оператор деления этажа, для перегрузки.
Перегрузите операторы сравнения
Python не ограничивает перегрузку операторов только двоичными или арифметическими операторами. Мы также можем перегружать операторы сравнения.
Пример 01: Оператор "Меньше"
Предположим, нам потребовалось меньше, чем '<' symbol в нашем 'Coord ' класс, который будет реализован. Сравним значение этих аргументов из источника и дадим ответ. Как обычно, его можно применять. У нас есть три объекта, и мы сравниваем их в операторах печати. В результате мы получим этот объект c1 является меньше чем c2, так что он выводит Правда. С другой стороны, c2 а также c1 находятся более отличный чем c3; поэтому оба вывода False.
Пример 02: Оператор не равен
Теперь перегружаем Не равный (!знак равно оператор сравнения, вы получите Правда в случае первого и второго оператора печати, потому что он удовлетворяет условию, что оба объекта не равны. С другой стороны, объект 1 дает то же, что и объект 3, что не соответствует требованию Не равно. Вот почему третий оператор печати выводит Ложь как результат.
Пример 03: Оператор больше или равно
Давайте попробуем тот же пример для перегрузки больше или равно оператору. В случае первого оператора печати мы имеем 2> = 13, который не правда; поэтому он дает False. Во втором и третьем операторах печати мы получили 13> = 2 а также 2> = 2, соответственно. Оба Правда поскольку они удовлетворяют условию больше или равно.
Попробуйте другие операторы сравнения, e.грамм., более значимо, чем, равно, «меньше или равно» в вашем коде.
Перегрузите операторы присваивания
Взгляните на пример перегрузки оператора присваивания. Возьмем аналогичный пример с перегрузкой знак равно оператор присваивания. Мы определили два объекта со значениями координат y и z. Первый объект c1 передает свои значения 'себя.y ' а также 'себя.z ' переменные соответственно. С другой стороны, объект c2 передает свои значения 'Другие.y ' а также 'Другие.z '.
Объект c1 имеет значения себя.у = 1 а также себя.г = 1 прямо сейчас. Объект c2 значения 'Другие.у = -2 ' а также 'Другие.z = -3 ' был передан вычтенный от объекта c1 значения. В итоге c1 - c2 приводит к себя.y - другое.у = 1 - (- 2) а также себя.z - другое.г = 1 - (- 3). Расчетный результат, который равен 3 и 4, был сохранен в.x 'и' я.z 'из-за оператора присваивания' =.'При печати этот код выведет результат объекта c1, который имеет две переменные себя.у = 3 а также себя.г = 4.
Заключение
Мы стараемся охватить все операторы в вашем коде для лучшего понимания перегрузки операторов.