@Hikikomori91

Почему код выдает AttributeError?

class Vector(object):
    def __init__(self, points):
        self.points = points

    def add(self, victor):
        self.victor = victor
        if len(victor.points) == len(self.points):
            return [x + y for x, y in zip(self.points, victor.points)]
        else:
            raise IndexError("different Length")

    def subtract(self, victor1):
        self.victor = victor1
        if len(victor1.points) == len(self.points):
            return [x - y for x, y in zip(self.points, victor1.points)]
        else:
            raise IndexError("different Length")

    def norm(self):
        return [x**2 for x in self.points]

    def dot(self, victor2):
        self.victor = victor2
        if len(victor2.points) == len(self.points):
            return [x * y for x, y in zip(self.points, victor2.points)]
        else:
            raise IndexError("different Length")

a = Vector([1,2])
b = Vector([3,4])
print(a.dot(b))
print(b.add(a))


Вылетает ошибка
Traceback:
in
AttributeError: 'list' object has no attribute 'equals'

Помогите разобраться
  • Вопрос задан
  • 212 просмотров
Решения вопроса 1
@throughtheether
human after all
Но там, где это должно работать (сайтик с задачками), оно не работает. Как мне переписать этот код, чтобы избавиться от этой ошибки непонятного генезиса?

Есть подозрение, что проверка результатов в тестовом окружении реализована путем вызова метода .equals(). Поэтому сделайте так:
1) реализуйте метод Vector.equals(self,other) в вашем классе (равен ли вектор другому вектору)
2) в методах Vector.add(...), Vector.subtract(...) возвращайте не список, а вектор (экземпляр класса Vector)
3) перепишите методы Vector.dot(...) и Vector.norm(...). Если они должны реализовывать скалярное произведение и норму, то почему они возвращают списки, а не числа?

И в чем смысл этих строк, я так и не понял:self.victor = victor, вы, вроде, нигде не используете self.victor.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы