class C(object):
def __init__(self, value):
self.value = value
def __add__(self, other):
if isinstance(other, C):
return self.value + other.value
if isinstance(other, Number):
return self.value + other
raise Exception("error")
c = C(123)
print c + c
print c + 2
print 2 + c
显然,前两个print语句可以工作,第三个语句失败,因为int.add()无法处理C类实例。在
^{pr2}$有没有办法绕过这个问题,所以2+c会导致调用c.add()?在
{需要处理^ a1}的情况:
注意,不应该引发异常;而是返回},并且还将有机会实现加法。
NotImplemented
单例。这样,另一个对象仍然可以尝试为您的对象支持__add__
或{当您尝试添加两个类型
a
和b
,Python首先尝试调用a.__add__(b)
;如果该调用返回NotImplemented
,则尝试使用b.__radd__(a)
。演示:
^{pr2}$您需要在类上实现
__radd__
。这是自动调用的,因为int类将引发
NotImplemented
错误相关问题 更多 >
编程相关推荐