假设您的课程如下所示:
class mytime(object):
def __init__(self, h, m):
self.h = h
self.m = m
def __add__(self, other):
return mytime(self.h + other.h, self.m + other.m)
def __repr__(self):
return '%i:%i' % (self.h, self.m)
你像这样使用它:
a = mytime(10, 10)
b = mytime(2, 22)
print a + b
它将按预期工作:
12:32
问题:
你想做的是:
l = [a, b]
print sum(l)
但它会失败:
类型错误:+ 不支持的操作数类型:“int”和“mytime”
问题是该sum
函数将开始0
并将列表的所有值相加。它将尝试评估
0 + mytime(10, 10)
这将失败。
解决方案:
您的问题的解决方案是实现该__radd__
函数,该函数表示“反向添加”,并且在无法在“正向”方向上解析参数时调用。例如,尽可能x + y
评估x.__add__(y)
,但如果不存在,那么 Python 会尝试y.__radd__(x)
.
因此,您可以将以下方法添加到您的类中:
def __radd__(self, other):
return mytime(self.h, self.m)
并且该sum
功能将为您工作(在此实现中忽略该other
值,这在您的情况下可能很好)。