Свои операторы в своей структуре питон? ч2
Опять таки, предположим есть класс v2:
class v2:
x: int
y: int
def __init__(self, x=0, y=0):
self.x = x; self.y = y
Для него я хотел создать операторы, и после немногих проб и ошибок и вопроса здесь, я пришел к такому написанию:
class v2:
x: int
y: int
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __add__(self, other):
return v2(self.x + other.x, self.y + other.y)
def __iadd__(self, other):
self.x += other.x
self.y += other.y
"__add__ для вектор_1 = вектор_2 + вектор3, а __iadd__ для вектор_1 += вектор_2" Но в первом случае работает все правильно, а во-втором:
v_1 = v2()
v_2 = v2()
v_1 += v_2
print(v_1)
# Вывод: None
Где я опять ошибся?
Ответы (1 шт):
Когда вы используете оператор +=
, Python ожидает, что метод __iadd__
вернет обновленный объект после выполнения операции. В вашем случае, когда вы пытались использовать +=
, метод __iadd__
не возвращал сам объект, из-за чего результат операции оказывался None
.
Изменил ваш метод __iadd__
, чтобы он работал как нужно:
class v2:
x: int
y: int
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __add__(self, other):
return v2(self.x + other.x, self.y + other.y)
def __iadd__(self, other):
self.x += other.x
self.y += other.y
return self # Теперь метод возвращает объект после изменения
Теперь, когда вы напишете v_1 += v_2
, объект v_1
будет обновлен и в тот же момент возвращен, так что print(v_1)
покажет результат изменений, а не None