我有一个自定义矢量类:
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] 删除。
我来说两句