python - 覆盖运算符以处理无类型
问题描述
我如何覆盖__iadd__
以便它处理None
?
例子:
var = None
myObject = MyObject()
var += myObject
var == myObject
>> True
如果我只是覆盖__iadd__
来myObject
处理将两个MyObject
' 加在一起,我会收到此错误:
回溯(最后一次调用):
文件“”,第 1 行,类型错误:+= 不支持的操作数类型:'NoneType' 和 'myObject'
解决方案
问题是如果 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()
推荐阅读
- python - 如何创建从用户单击向数据库添加点的工具?
- ruby-on-rails - Pundit::NotAuthorizedError / 权威授权问题
- mongodb - 聚合嵌套 objectid
- angular - Angular 8 - 如何将一个模型数据推送到另一个模型
- android - 有没有办法检查是否应用了 NoiseSuppressor?
- regex - 如何在 sed 命令中匹配正则表达式 1 到 3 次?
- mongodb - 嵌套文档数组上的 MongoDB 条件查询
- c++ - 与 int 相比,double 数据类型如何在 C++ 中大量改变答案?
- oracle - 任务管理器的批处理错误级别问题
- neural-network - 计算神经网络中的参数个数