python int没有__iadd __()方法?

Aus*_*son 4 python integer immutability

我知道这是不好的做法:

>>> a = 5
>>> a.__radd__(5)
10
>>> a
5
>>> a.__iadd__(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute '__iadd__'
Run Code Online (Sandbox Code Playgroud)

出于好奇,如果一个int对象没有__iadd__,那怎么+=工作?

S.L*_*ott 6

出于好奇,如果一个int对象没有__iadd__,那么+ =如何工作?

a += 5
Run Code Online (Sandbox Code Playgroud)

a = a + 5
Run Code Online (Sandbox Code Playgroud)

因为__iadd__不可变对象没有.

这是(实际上)

a = a.__add__( 5 )
Run Code Online (Sandbox Code Playgroud)

并且工作得很好.创建一个新的int对象__add__.

一些规则在http://docs.python.org/reference/datamodel.html#coercion-rules.

  • 这当然是因为整数是不可变的,即整数对象无法自行递增. (3认同)