python int没有__iadd __()方法?

时间:2010-11-03 15:31:34

标签: 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__'

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

2 个答案:

答案 0 :(得分:6)

  

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

a += 5

变为

a = a + 5

因为不可变对象没有__iadd__

这是(实际上)

a = a.__add__( 5 )

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

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

答案 1 :(得分:3)

如果某个对象没有__iadd__,则会使用__add__。方法__iadd__被认为是一个优化的就地__add__案例,它不是强制性的。