Некорректное переопределение метода __len__
Подскажите, пожалуйста, почему метод __len__ выдаёт мне разные результаты для списков одинаковой длинны? И подскажите, ещё пожалуйста, как сделать так, чтобы после операции v1 = v + 5 v и v1 оставались отличными друг от друга. Потому что сейчас получается что при выводе на печать любого из этих экземпляров выводится одно и тоже.
Заранее огромное спасибо!
class Vector:
def __init__(self, *args):
self.values = sorted([i for i in args if isinstance(i, int)])
def __str__(self):
return f'Вектор{tuple(self.values)}' if len(self.values) > 0 else 'Пустой вектор'
def __len__(self):
return len(self.values)
def __add__(self, other):
if isinstance(other, int):
self.values = sorted([i + other for i in self.values])
return f'Вектор{tuple(self.values)}' if len(self.values) > 0 else 'Пустой вектор'
v = Vector(1, 2, 4, -7.6, 8.2, 2, 0)
v1 = v + 5
print(len(v), len(v1))
print(v, v1)
Ответы (1 шт):
Автор решения: dIm0n
→ Ссылка
Потому что в методе __add__ вы возвращаете строку, а надо экзмепляр класса.
С минимальными изменениями:
class Vector:
def __init__(self, *args):
self.values = sorted([i for i in args if isinstance(i, int)])
def __str__(self):
return f'Вектор{tuple(self.values)}' if len(self.values) > 0 else 'Пустой вектор'
def __len__(self):
return len(self.values)
def __add__(self, other):
if isinstance(other, int):
return Vector(*sorted([i + other for i in self.values]))
v = Vector(1, 2, 4, -7.6, 8.2, 2, 0)
v1 = v + 5
print(len(v), len(v1))
print(v, v1)