Как правильно добавить оператор своей структуре данных 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__
(+=
).