繁体   English   中英

实例没有__call__方法

[英]instance has no __call__ method

我已经写了下面的代码作为练习,并用我的应用程序做一些向量代数。

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)

当我想创建两个实例( v1v2 )并使用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方法?

在您的方法签名中:

def cross(self,Vector):  # and also the other methods

Vector参数是着色Vector类名。 您应该以不同的方式命名您的参数,例如小写的vector

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM