擅长:python、mysql、java
<p><code>Vektor.__init__</code>需要多少个参数?忽略<code>self</code>,它是两个-<code>x</code>和{<cd4>}。在</p>
<p>当您编写<code>return Vektor(self.x*digeri.x,self.y*digeri.y)</code>时,您传递了两个参数,因此这是可行的。在</p>
<p>当您编写<code>self.x = Vektor(self.x + digeri.x)</code>时,这不起作用,因为您没有为<code>y</code>值传递第二个参数。在</p>
<p>当Python给出错误时,它应该包含一个行号,它应该显示错误发生的位置。你没有写,但这是这行,不是吗?在</p>
<p>由于<code>Vektor</code>应该包含两个标量,并且有时不会用两个向量替换它们,所以您可以只编写</p>
<pre><code> self.x = self.x + digeri.x # still not a vector
self.y = self.y + digeri.y # also not a vector
</code></pre>
<p>但更重要的一课是仔细阅读错误消息。你需要的一切都在那里。在</p>
<hr/>
<p>关于操作符语义的一点注记:由于您通常不会期望像<code>x = v * w</code>这样的表达式来修改<code>x</code>,所以无论如何也不应该在操作符函数内对<code>self</code>进行变异。在</p>
<p>返回结果向量,这就足够了。我向您展示了如何修复这两行的<em>语法</em>,但您实际上应该完全删除它们。在</p>
<p>关于向量的另一个注意事项是:重载<code>*</code>并不像标量数值类型那样明显获胜,因为向量通常有不止一种可能的乘积类型。在</p>