Шаг 141.
Основы языка Python.
Объектно-ориентированное программирование (ООП). Перегрузка операторов

    На этом шаге мы рассмотрим особенности реализации перегрузки операторов.

    Перегрузка операторов позволяет экземплярам классов участвовать в обычных операциях. Чтобы перегрузить оператор, необходимо в классе определить метод со специальным названием. Для перегрузки математических операторов используются следующие методы:

    Пример перегрузки математических операторов:

class MyClass:
    def __init__ (self, y):
        self.x = y
    def __add__ (self, y):	# Перегрузка оператора +
        print("Экземпляр слева")
        return self.x + y
    def	__radd__(self, y):      # Перегрузка оператора +
        print("Экземпляр справа")
        return self.x + y
    def __iadd__(self, y):      # Перегрузка оператора +=
        print("Сложение с присваиванием")
        self.x += y
        return self

c = MyClass(50)
print(c + 10) #  Выведет:   Экземпляр слева  60
print(20 + c) #  Выведет:   Экземпляр справа 70
c += 30	      #  Выведет:   Сложение с присваиванием
print (c.x)   #  Выведет:   80
Архив с файлом можно взять здесь.

    Результат работы приложения:

Экземпляр слева
60
Экземпляр справа
70
Сложение с присваиванием
80

    Методы перегрузки двоичных операторов:

    Перегрузка операторов сравнения производится с помощью следующих методов:

    Приведем пример перегрузки операторов сравнения:

class MyClass:
    def __init__ (self):
        self.x = 50
        self.arr = [1, 2, 3, 4, 5]
    def __eq__ (self, y):       # Перегрузка оператора ==
        return self.x == y
    def __contains__ (self, y): # Перегрузка оператора in
        return y in self.arr

c = MyClass()
print("Равно" if c == 50 else "He равно") # Выведет: Равно
print("Равно" if c == 51 else "He равно") # Выведет: Не равно
print("Есть" if 5 in c else "Нет")        # Выведет: Есть
Архив с файлом можно взять здесь.

    Результат работы приложения:

Равно
He равно
Есть

    На следующем шаге мы рассмотрим статические методы и методы класса.




Предыдущий шаг Содержание Следующий шаг