我一直以为在Python(3.5)中使用"+"操作符会自动调用__add__方法并返回它们的和。但是,当涉及到负数时,我注意到了一些奇怪的行为。
>>>-3 + 7
返回4
但是(!)
>>>-3 .__add__(7)
返回-10和
>>>-3 .__add__(-7)
4
>>>3 .__add__(7)
10
如果对象已签名,__add__为什么会对参数进行符号标记?此外,方法中有哪些变化,使得当我使用“+”时,“正确”的值出现?
-
也是运算符,是一元运算符。你在3
上调用了__add__
,而不是在应用于3
的-
的结果上调用__add__
,因为属性访问比-
运算符绑定更紧密。
使用括号:
>>> (-3).__add__(7)
4
你的代码对 3 + 7
的结果应用了负号一元运算符 -
。
.__add__
是两个对象之间的操作,因此 3.add(7) = 10;
-3.add(7) 就像对 3 和 7 调用 add 然后作为运算符应用 (-)
所以结果是 -(10)
您需要使用括号来获得正确的操作