我知道这是不好的做法:
>>> 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__
,那么+=
如何工作?
答案 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__
案例,它不是强制性的。