来自docs:Manyoperationshavean“in-place”version.Thefollowingfunctionsprovideamoreprimitiveaccesstoin-placeoperatorsthantheusualsyntaxdoes;forexample,thestatementx+=yisequivalenttox=operator.iadd(x,y).Anotherwaytoputitistosaythatz=operator.iadd(x,y)isequivalenttothecompoundstatementz=x;z+=y.问题:为什么op
我正在尝试创建一个Python属性,其中就地添加是通过与检索值、添加另一个值和重新分配不同的方法来处理的。因此,对于对象o上的属性x,o.x+=5应该不同于o.x=o.x+5o.x的值最终应该是一样的,以免混淆人们的预期,但是我想让就地添加更高效。(实际上,该操作比简单的加法要花费更多的时间。)我的第一个想法是在类里面定义,x=property(etc.etc.)x.__iadd__=my_iadd但这会引发一个AttributeError,大概是因为property实现了__slots__?我的下一次尝试使用描述符对象:classIAddProp(object):def__init_
python的documentationonthemethodsrelatedtothein-placeoperators类似于+=和*=(或者,正如它所说的,增加的算术赋值)有以下说法:这些方法应该尝试就地执行操作(修改self)并返回结果(可能是self,但不一定是self)。如果未定义特定的方法,则增强的赋值将返回到普通方法。我有两个密切相关的问题:如果文档指定,如果实现了这些方法,那么它们应该只在适当的地方进行工作,那么为什么需要从这些方法返回任何东西呢?为什么在实现了__iadd__的情况下,增广的赋值操作符不简单地执行冗余赋值?在什么情况下,从增广的赋值方法返回self之外
是否可以在Python中覆盖+=? 最佳答案 是的,覆盖__iadd__方法。示例:def__iadd__(self,other):self.number+=other.numberreturnself 关于python-在Python中覆盖"+="?(__iadd__()方法),我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1047021/