Python:方法中的Operandtype-Error,但不是在main中,代码相同



我是python编程新手,尝试创建自己的vector类。这个类有一个变量值,它是一个整数值列表。构造函数如下所示:

def __init__(self, *args: int):
if len(args) == 0: self.values = [0, 0]
else: self.values = [value for value in args]

我想实现一个方法,叫做vector_sum;这是一个静态方法,将返回一个带有相应元素和值的Vector。例如(只是计算):sum((1、2),(3、4),(5、6))=(9日12)

我的方法是这样的:

def vector_sum(vectors: List[Vector]) -> Vector:
vals: List[int] = []
for i in range(len(vectors)):
for j in range(len(vectors[i].values)):
if i == 0:
vals.append(vectors[i].values[j])
else:
vals[j] += vectors[i].values[j]
z: Vector = Vector(*vals)
return z

当我想打印方法的结果时,有这个错误:

Traceback (most recent call last):
File "...", line 61, in <module>
print(sum(vectors).values)
TypeError: unsupported operand type(s) for +: 'int' and 'Vector'

我很困惑,因为如果我试图通过main运行这段完全相同的代码,它工作得很好:

if __name__ == '__main__':
v: Vector = Vector(1, 2)
w: Vector = Vector(3, 4)
x: Vector = Vector(5, 6)
vectors: List[Vector] = [v, w, x]
vals: List[int] = []
for i in range(len(vectors)):
for j in range(len(vectors[i].values)):
if i == 0:
vals.append(vectors[i].values[j])
else:
vals[j] += vectors[i].values[j]
z: Vector = Vector(*vals)
print(z.values)

打印出如下结果:

[9, 12]
Process finished with exit code 0

我无法解释为什么会发生这种情况。它是如此令人困惑,它运行在main中,而不是在方法中,尽管它是完全相同的代码。

PS:我当然使用列表"矢量"了。

如果你能帮助我,那就太好了。问候Moe

您需要调用您创建的函数vector_sum,而不是sum:

print(vector_sum(vectors).values)

sum接受第二个可选参数来指定初始值。如果不提供它,则默认为0,而不是假设iterable参数为空。这就是为什么sum([]) == 0sum([1]) == 1 + 0 == 1。基本上,sum的行为类似于

def sum(itr, init=0):
rv = init
for x in itr:
rv += x
return rv

初始值应该是实际加法运算符的标识符。0适用于数字,因为x + 0 == 0 + x == x适用于数字类型。它不为您的向量工作,因为您没有指定v + 0是什么意思。您需要这样做,或者提供一个身份向量作为sum的第二个参数。

(所有这些都假设您已经定义了Vector.__add__以允许sum添加向量)

相关内容

  • 没有找到相关文章

最新更新