覆盖运算符以处理任何类型

时间:2018-10-08 18:39:24

标签: python python-3.x operator-overloading

如何覆盖__iadd__以便它处理None

示例:

var = None
myObject = MyObject()
var += myObject
var == myObject
>> True

如果我只是覆盖__iadd__中的myObject来处理两个MyObject的加法运算,则会出现此错误:

  

回溯(最近通话最近):
  文件“”,第1行,位于    TypeError:+ =:'NoneType'和不支持的操作数类型   'myObject'

1 个答案:

答案 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()