Сколько аргументов требуется Vektor.__init__
?Игнорируя self
, это два - x
и y
.
Когда вы написали return Vektor(self.x*digeri.x,self.y*digeri.y)
, вы передали два аргумента, так что это работает.
Когда вы написали self.x = Vektor(self.x + digeri.x)
, это не работает, потому что вы не передаете второй аргумент для значения y
.
Когда Python сообщал вам об ошибке, он должен был включать номер строки, которая должна указывать, гдепроизошла ошибкаВы не включили это, но это была эта строка, не так ли?
Поскольку Vektor
должен содержать два скаляра и иногда не заменять их двумя векторами, вы можете просто написать
self.x = self.x + digeri.x # still not a vector
self.y = self.y + digeri.y # also not a vector
но более важный урок - . Внимательно прочитайте сообщение об ошибке .Все, что вам было нужно, было там.
Замечание о семантике операторов: поскольку обычно вы не ожидаете, что выражение, такое как x = v * w
, изменит x
, вы не должны мутировать self
внутриоператорская функция в любом случае.
Вы возвращаете результирующий вектор, чего достаточно.Я показал вам, как исправить синтаксис этих двух строк, но на самом деле вы должны просто полностью удалить их.
И еще одно замечание о векторах: перегрузка *
не так очевиднавыиграть, как это для скалярного числового типа, потому что векторы обычно имеют более одного возможного типа продукта.