__add__ 方法和 Python 中的负数
__add__ method and negative numbers in Python
我一直认为在 Python (3.5) 中使用“+”运算符会在后台调用 __add__ 方法并 return 求和。但是,当涉及负数时,我注意到一些古怪的行为。
当然,
>>>-3 + 7
returns 4
但是(!)
>>>-3 .__add__(7)
returns -10 和
>>>-3 .__add__(-7)
4
>>>3 .__add__(7)
10
如果对象已签名,__add__ 是否有理由对参数进行签名。另外,方法有什么变化,所以当我使用“+”时,"correct" 值就出来了?
-
也是一个运算符,一个一元运算符。您在 3
上调用了 __add__
,而不是在 -
应用于 3
的结果上调用,因为 attribute access binds more tightly than the -
operator。
使用括号:
>>> (-3).__add__(7)
4
您的代码将 -
一元运算符应用于 3 + 7
的结果。
.__add__
是两个对象之间的操作所以 3.add(7) = 10;
-3.add(7) 就像为 3 和 7 调用 add 然后将 (-) 应用为运算符
所以 -(10) 作为结果
您需要使用括号才能正确操作
我一直认为在 Python (3.5) 中使用“+”运算符会在后台调用 __add__ 方法并 return 求和。但是,当涉及负数时,我注意到一些古怪的行为。 当然,
>>>-3 + 7
returns 4
但是(!)
>>>-3 .__add__(7)
returns -10 和
>>>-3 .__add__(-7)
4
>>>3 .__add__(7)
10
如果对象已签名,__add__ 是否有理由对参数进行签名。另外,方法有什么变化,所以当我使用“+”时,"correct" 值就出来了?
-
也是一个运算符,一个一元运算符。您在 3
上调用了 __add__
,而不是在 -
应用于 3
的结果上调用,因为 attribute access binds more tightly than the -
operator。
使用括号:
>>> (-3).__add__(7)
4
您的代码将 -
一元运算符应用于 3 + 7
的结果。
.__add__
是两个对象之间的操作所以 3.add(7) = 10;
-3.add(7) 就像为 3 和 7 调用 add 然后将 (-) 应用为运算符
所以 -(10) 作为结果
您需要使用括号才能正确操作