Python 使用uuu add uuuu方法进行相加

Python 使用uuu add uuuu方法进行相加,python,class,add,Python,Class,Add,我现在正在做一个创建球并给它们定位的类。我想给这个类添加一个add方法,它获取两个球的位置并将它们相加。我使用的代码是: class Ball: def __init__ (self, x, y): self.position = [x, y] def __add__ (self, other): return self.position + other.position ball1 = Ball(3, 4) print (ball1.p

我现在正在做一个创建球并给它们定位的类。我想给这个类添加一个add方法,它获取两个球的位置并将它们相加。我使用的代码是:

class Ball:
    def __init__ (self, x, y):
        self.position = [x, y]
    def __add__ (self, other):
        return self.position + other.position
    
ball1 = Ball(3, 4)
print (ball1.position)
ball2 = Ball(5, 8)
print (ball2.position)
ball3 = Ball(4, 4)
print (ball3.position)
ball4 = ball1 + ball3
print (ball4)
代码目前的工作方式与预期不符。我希望ball1+ball3的位置加起来,但我得到的打印结果如下:

[3, 4]
[5, 8]
[4, 4]
[3, 4, 4, 4]
def __add__ (self, other):
    return [self.position[0]+other.position[0], self.position[1]+other.position[1]]

我们将ball1和ball3的x和y值并排放置,而不是相加。

当您将两个列表相加时,它只是附加在一起。 您的add需要如下所示:

[3, 4]
[5, 8]
[4, 4]
[3, 4, 4, 4]
def __add__ (self, other):
    return [self.position[0]+other.position[0], self.position[1]+other.position[1]]

使用列表理解和
zip
分别添加项目:

[b1 + b3 for b1, b3 in zip(ball1.position, ball3.position)]

编辑:您可以将列表进一步简化为:

ball4 = [sum(b) for b in zip(ball1.position,ball3.position)]

使用数组时,“+”运算符将两个操作数中的元素合并,并返回一个新数组。所以,好的方面不是做你认为的事情


您必须开发另一个函数,对数组的每个成员求和并返回这个新数组。

这是因为您在两个python列表之间使用sum运算符,这将连接两个列表。如果你想按元素总结这些元素,你必须这样做:

返回[self.x+other.x,self.y+other.y]
我还建议您看看numpy库,它将提供您想要的数学运算符。在这种情况下,您的类可以重写为:

将numpy导入为np
班级舞会:
定义初始化(self,x,y):
self.position=np.array([x,y])
定义添加(自身、其他):
返回自我位置+其他位置
球1=球(3,4)
打印(1.位置)
球2=球(5,8)
打印(2.位置)
ball3=Ball(4,4)
打印(3.位置)
球4=球1+球3
印刷品(鲍尔4)
结果是:

>>> ball1 = Ball(3, 4)
>>> print (ball1.position)
[3 4]
>>> ball2 = Ball(5, 8)
>>> print (ball2.position)
[5 8]
>>> ball3 = Ball(4, 4)
>>> print (ball3.position)
[4 4]
>>> ball4 = ball1 + ball3
>>> print (ball4)
[7 8]

您必须在列表中添加单个项目,而不仅仅是两个列表。
+
被视为列表(序列)的串联。看见