Сначала стоит напомнить, что методы, которые начинаются и заканчиваются двойными нижними подчеркиваниями, называются магическими.
Например, выше в классе Point мы определили __str__, который отвечает за то, как выводятся объекты класса на экран.
Для перегрузки оператора «+» нужно определить метод __add__. Он принимает два аргумента, которыми являются, соответственно, операнды в операции сложения.
Таким образом, когда разработчик пишет запись p1 + p2, интерпретатор воспринимает это в виде Point.__add__(p1, p2). Для всех операторов в языке, включая и логические, есть свои магические методы.
class Point:
def __init__ (self, x=0, y=0):
self.x = x
self.y = y
def __str__ (self):
return '({0}, {1})'.format(self.x, self.y)
def __add__ (self, other):
x = self.x + other.x
y = self.y + other.y
return Point(x, y)
p1 = Point(1, 2)
p2 = Point(2, 3)
print(p1 + p2)