【发布时间】:2014-03-08 18:36:14
【问题描述】:
我写了下面的代码作为练习,并用我的应用程序做一些向量代数。
from math import acos
class Vector:
def __init__(self,x,y,z):
self.x = x; self.y = y; self.z = z
def __str__(self):
return str(self.x) + "i + " + str(self.y) + "j + " + str(self.z) + "k"
def magnitude(self):
return self.x**2 + self.y**2 + self.z**2
def plus(self,Vector):
return Vector(self.x+Vector.x,self.y+Vector.y,self.z+Vector.z)
def minus(self,Vector):
return Vector(self.x-Vector.x,self.y-Vector.y,self.z-Vector.z)
def dot(self,Vector):
return self.x*Vector.x,self.y*Vector.y,self.z*Vector.z
def angle(self,Vector):
return acos(self.dot(Vector)/(self.magnitude*Vector.magnitude))
def cross(self,Vector):
return Vector(self.x*Vector.z-self.z*Vector.y,self.z*Vector.x-self.x*Vector.z,self.x*Vector.y-self.y*Vector.x)
当我想创建两个实例(v1 和 v2)并使用 v1.cross(v2) 时,我收到以下错误。
>>> v1.cross(v2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "vector_algebra.py", line 33, in cross
return acos(self.dot(Vector)/(self.magnitude*Vector.magnitude))
AttributeError: Vector instance has no __call__ method
我做错了什么?如何为此类创建call 方法?
【问题讨论】:
-
您的回溯与您发布的代码不匹配。发布的代码确实出现了错误。
-
为了创建缩进,我将代码复制到其他地方,而不是复制到这里。