Python中的__add__方法和负数

3

我一直以为在Python(3.5)中使用"+"操作符会自动调用__add__方法并返回它们的和。但是,当涉及到负数时,我注意到了一些奇怪的行为。

>>>-3 + 7

返回4

但是(!)

>>>-3 .__add__(7)

返回-10和

>>>-3 .__add__(-7)
4
>>>3 .__add__(7)
10

如果对象已签名,__add__为什么会对参数进行符号标记?此外,方法中有哪些变化,使得当我使用“+”时,“正确”的值出现?

2个回答

8

-也是运算符,是一元运算符。你在3上调用了__add__,而不是在应用于3-的结果上调用__add__,因为属性访问比-运算符绑定更紧密

使用括号:

>>> (-3).__add__(7)
4

你的代码对 3 + 7 的结果应用了负号一元运算符 -


1

.__add__ 是两个对象之间的操作,因此 3.add(7) = 10; -3.add(7) 就像对 3 和 7 调用 add 然后作为运算符应用 (-) 所以结果是 -(10) 您需要使用括号来获得正确的操作


是的,正如我在你发帖前5分钟已经解释过的那样。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接