首页 > 解决方案 > 覆盖运算符以处理无类型

问题描述

我如何覆盖__iadd__以便它处理None

例子:

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

如果我只是覆盖__iadd__myObject处理将两个MyObject' 加在一起,我会收到此错误:

回溯(最后一次调用):
文件“”,第 1 行,类型错误:+= 不支持的操作数类型:'NoneType' 和 'myObject'

标签: pythonpython-3.xoperator-overloading

解决方案


问题是如果 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()

推荐阅读