Я пытаюсь перегрузить оператор == в классе, и это метод инициализации:Перегрузка __eq__ в классе
class Point:
def __init__(self, a, b, c, d):
self.a = a
self.b = b
self.c = c
self.d = d
self._fields = ['a','b','c','d']
И я пытаюсь перегрузить оператор ==, а вот мой код для этого:
def __eq__(self,right):
if type(right) == type(self):
for i in self._fields:
print(self._fields.index(i))
else:
return False
return True
для ==, чтобы быть правдой, все значения в инициализации должны быть одинаковыми. Поэтому, если у меня есть test=Point(1,2,3)
, а затем у меня есть test2 = Point(1,2,3)
, тогда тест == test2 должен вернуть True
. Однако у меня есть test=Point(1,2,3)
и test2=Point(1,1,3)
, и это возвращается True
. Кто-нибудь может понять, почему это так?
Это еще не ваш фактический код, 'если тип (справа) не {type_name}' всегда будет истинным, так как вы сравниваете 'Point' с' set' здесь. (Учитывая, что вы где-то определили 'имя_имя ') –
Вы правы. Я обновил свой текущий код, где я пытаюсь использовать self.i, как сказал один из ответов, но безрезультатно. – Tyler
Ваш текущий код ничего не делает для сравнения 'self' с' right', он вернет 'True', когда' right' имеет тип 'Point'. Плюс сама инициализация 'test2 = Point (1,1,3)' не будет выполнена из-за неправильного количества аргументов. –