Как правильно добавить оператор своей структуре данных Python?

Предположим есть класс vector2:

class v2():
    x: int
    y: int
    def __init__(self, x=0, y=0):
        self.x = x; self.y = y

    def __add__(self, other):
        self.x += other.x; self.y += other.y
        return self

В коде типа:

some_v2 = some_second_v2 = v2()
some_v2 += some_second_v2

Всё работает прекрасно

Но при:

A = B = v2()
C = A + B

C будет равно A + B, но при этом и к A прибавится B.

Как можно правильно определить оператор для в данном случае вектора, чтобы он корректно работал (в смысле как задумывалось, чтобы работал (Как например int в питоне))?


Ответы (1 шт):

Автор решения: wchistow

Метод __add__ должен возвращать новый объект - результат сложения, а не изменять свой, например так:

def __add__(self, other):
    return v2(self.x + other.x, self.y + other.y)

Так, как у вас написан метод __add__ должен выглядеть __iadd__ (+=).

→ Ссылка