为什么总和的行为不像加号运算符? 我如何在课堂上使用sum
class Item:
def __init__(self, factor):
self.factor = factor
def __add__(self, other):
return Item(self.factor + other.factor)
print((Item(2) + Item(4)).factor) # 6
print(sum([Item(2), Item(4)]).factor) # TypeError: unsupported operand type(s) for +: 'int' and 'Item'
itertools.reduce with operator.add也可以工作,但需要大量键入
初始化
sum
的start
参数为Item
类型的对象,因为它的默认值是int
类型的对象,如docs:sum(iterable, /, start=0)
中所述,其中0
是int
这是因为
sum
返回一个“开始”值(默认值:0)加上一个可数这相当于
0 + Item(2) + ...
,因此TypeError
!。可以将Item(0)
作为默认值传递,而不是0相关问题 更多 >
编程相关推荐