如何覆盖__iadd__
以便它处理None
?
示例:
var = None
myObject = MyObject()
var += myObject
var == myObject
>> True
如果我只是覆盖__iadd__
中的myObject
来处理两个MyObject
的加法运算,则会出现此错误:
回溯(最近通话最近):
文件“”,第1行,位于 TypeError:+ =:'NoneType'和不支持的操作数类型 'myObject'
答案 0 :(得分:0)
问题是,如果var = None,则__iadd__
方法将在None而不是MyObject上被调用
class myobject:
def __iadd__(self, other):
if other is None:
return self
else:
pass # Do stuff here
这很好:
var = myobject()
var += None
但这不会:
var = None
var += myobject()
处理它的最好方法是捕获错误:
try:
var += myobject()
except TypeError:
var = myobject()