__add__方法和Python中的负数

时间:2016-02-25 10:20:05

标签: python integer add

我总是在Python(3.5)中使用“+”运算符调用引擎盖下的__add__方法并返回总和。但是,当涉及负数时,我注意到一些古怪的行为。 自然地,

>>>-3 + 7

返回4

但是(!)

>>>-3 .__add__(7)

返回-10和

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

如果对象已签名,是否有__add__对参数进行签名的原因。此外,该方法有什么变化,以便当我使用“+”时,出现“正确”值?

2 个答案:

答案 0 :(得分:8)

-也是一个运营商,一个单一的运营商。您在__add__上致电3,而不是-申请3的结果,因为attribute access binds more tightly than the - operator

使用括号:

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

您的代码会将-一元运算符应用于3 + 7的结果。

答案 1 :(得分:1)

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