用下面的代码
class Num():
def __init__(self, val):
self.val = val
def __iadd__(self, other):
return Num(self.val + other.val)
a = Num(4)
b = Num(6)
print(a += b)
我遇到了以下错误:
File "main.py", line 12
print(a += b)
^
SyntaxError: invalid syntax
如果+=更改为+,则一切正常,但由于+=某种原因会发生错误。同时,在某些功能上return a += b也会产生同样的问题。
问题:为什么返回值会+=出错?__iadd__
打印中的赋值可以这样完成:
__iadd_____add__您可能用 C 或类似语言进行过编程。
但Python不是C(C/C++)。B C 和每个赋值也是一个表达式(具有精确定义的含义)。
在 Python 中
a += b这并不重要,甚至None. 这只是一个命令。:-(虽然函数
__iadd__()返回一个值,但它只会用于赋值。笔记:
为了能够在 Python 中同时使用赋值作为表达式,从Python 3.8
=版本开始,可以使用运算符而不是运算符:=- 那么这样的赋值也将是一个表达式,类似于 C。但没有运营商
:+=。这意味着要使您的示例正常工作,您需要将其替换
a += b为表达式a := a + b。操作员
+=不期望从该方法返回值__iadd__。它期望__iadd__修改当前对象并返回它,但不期望返回值用作表达式。如果您需要在 print() 中使用 +=,请尝试重写该方法
__add__并__iadd__返回一个新对象。