Перегрузка оператора Python
Перегрузка оператора Python
Вы можете изменить значение оператора в Python в зависимости от используемых операндов. В этом руководстве вы узнаете, как использовать перегрузку операторов в объектно-ориентированном программировании Python.
Перегрузка оператора Python
Операторы Python работают со встроенными классами. Но один и тот же оператор ведет себя по-разному с разными типами. Например, 07
Оператор выполняет арифметическое сложение двух чисел, объединяет два списка или объединяет две строки.
Эта функция в Python, позволяющая одному и тому же оператору иметь разное значение в зависимости от контекста, называется перегрузкой оператора.
Так что же происходит, когда мы используем их с объектами определяемого пользователем класса? Давайте рассмотрим следующий класс, который пытается имитировать точку в двумерной системе координат.
04
Вывод
13
Здесь мы видим, что 19
был поднят, так как Python не знал, как добавить два 22
объекты вместе.
Однако мы можем решить эту задачу в Python с помощью перегрузки операторов. Но сначала давайте разберемся со специальными функциями.
<час>Специальные функции Python
Функции класса, начинающиеся с двойного подчеркивания 39
в Python называются специальными функциями.
Эти функции не являются типичными функциями, которые мы определяем для класса. 42
функция, которую мы определили выше, является одной из них. Он вызывается каждый раз, когда мы создаем новый объект этого класса.
В Python есть множество других специальных функций. Посетите Специальные функции Python, чтобы узнать о них больше.
Используя специальные функции, мы можем сделать наш класс совместимым со встроенными функциями.
21
Предположим, мы хотим, чтобы 59
функция для печати координат 60
объект вместо того, что мы получили. Мы можем определить 75
метод в нашем классе, который управляет тем, как печатается объект. Давайте посмотрим, как мы можем этого добиться:
35
Теперь давайте попробуем 83
снова работать.
43
Вывод
51
Так-то лучше. Оказывается, этот же метод вызывается, когда мы используем встроенную функцию 92
или 101
.
64
Итак, когда вы используете 115
или 124
, Python внутренне вызывает 138
метод. Отсюда и название, специальные функции.
Теперь вернемся к перегрузке операторов.
<час>Перегрузка оператора +
Чтобы перегрузить 143
оператор, нам нужно будет реализовать 157
функция в классе. С большой властью приходит большая ответственность. Внутри этой функции мы можем делать все, что захотим. Но более разумно возвращать 168
объект суммы координат.
76
Теперь снова попробуем операцию сложения:
83
Вывод
93
На самом деле происходит следующее:когда вы используете 178
, Python вызывает 180
что, в свою очередь, равно 191
. После этого операция сложения выполняется так, как мы указали.
Точно так же мы можем перегрузить и другие операторы. Специальная функция, которую нам нужно реализовать, представлена в таблице ниже.
Оператор | Выражение | Внутри |
---|---|---|
Дополнение | 203 | 217 |
Вычитание | 228 | 230 |
Умножение | 241 | 250 |
Мощность | 266 | 279 |
Отдел | 283 | 297 |
Этажное разделение | 300 | 319 |
Остаток (по модулю) | 327 | 333 |
Побитовый сдвиг влево | 345 | 355 |
Побитовый сдвиг вправо | 365 | 376 |
Побитовое И | 383 | 392 |
Побитовое ИЛИ | 403 | 419 |
Побитовое исключающее ИЛИ | 421 | 431 |
Побитовое НЕ | 444 | 455 |
Перегрузка операторов сравнения
Python не ограничивает перегрузку операторов только арифметическими операторами. Мы также можем перегружать операторы сравнения.
Предположим, мы хотим реализовать символ меньше чем 465
. символ в нашем 474
класс.
Давайте сравним величину этих точек от начала координат и вернем результат для этой цели. Это может быть реализовано следующим образом.
100пре>Вывод
117Точно так же специальные функции, которые нам нужно реализовать для перегрузки других операторов сравнения, приведены в таблице ниже.
Оператор | Выражение | Внутри |
---|---|---|
Меньше чем | 489 | 492 |
Меньше или равно | 500 | 517 |
Равно | 524 | 534 |
Не равно | 548 | 554 |
Больше, чем | 564 | 577 |
Больше или равно | 589 | 593 |
Python