我总是在Python(3.5)中使用“+”运算符调用引擎盖下的__add__方法并返回总和。但是,当涉及负数时,我注意到一些古怪的行为。 自然地,
>>>-3 + 7
返回4
但是(!)
>>>-3 .__add__(7)
返回-10和
>>>-3 .__add__(-7)
4
>>>3 .__add__(7)
10
如果对象已签名,是否有__add__对参数进行签名的原因。此外,该方法有什么变化,以便当我使用“+”时,出现“正确”值?
答案 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)因此
您需要使用括号来获得正确的操作