Python类方法:减去两个向量

hkj447

我有一个自定义矢量类:

class VectorND:

    def __init__(self, *args, max=0):
        self.args = args
        max = len(args)
        self.max = max

    def __add__(self, x):
        if len(x.args) != len(self.args):
            raise Exception("Vectors are not same length")
        sum_coords = []
        for i in range(self.max):
            h = self.args[i] + x.args[i]
            sum_coords.append(h)
        new_coords = tuple(sum_coords)
        return VectorND(new_coords)
        
    def __subtract__(self, x):
        if len(x.args) != len(self.args):
            raise Exception("Vectors are not same length")
        sum_coords = []
        for i in range(self.max):
            h = self.args[i] - x.args[i]
            sum_coords.append(h)
        new_coords = tuple(sum_coords)
        return VectorND(new_coords)

    def __iter__(self):
        self.n = 0
        return self

    def __next__(self):
        if self.n >= self.max:
            raise StopIteration
        entry = self.args[self.n]
        self.n += 1
        return entry

    def __str__(self):
        return "Vector: {[0]}".format(self.args)

在这里,我试图表示矢量减法,但是在运行这段代码时出现以下错误:

vec1= VectorND(1,2,3)
vec2 = VectorND(3,4,5)
vec3 = vec1 + vec2
print(vec3)

vec4 = vec2 - vec1
print(vec4)

>>>TypeError: unsupported operand type(s) for -: 'VectorND' and 'VectorND'

vec3产生正确的结果(4,6,8); 但是,vec4引发TypeError。我不确定为什么会这样,因为加法和减法之间的唯一区别就是减去了元组的项。导致此错误的这两种不同方法之间的细微差别是什么?

西普拉珊斯

您的函数__add__()是python中预定义函数的重载形式,已映射为“ +”运算符。但是__subtract__()未映射到任何运算符。

而是尝试使用__sub__()它映射到“-”运算符的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章