相关疑难解决方法(0)

为什么一个可以加到自身的类不能求和?(a+a 有效, sum([a,a]) 失败)

在以下代码段中,我创建了一个 Counter 对象,并尝试使用三种方式将其添加到自身中。使用“+”的标准加法,从列表中减少(内部与前面相同)并使用列表中的函数 sum()。

前 2 个工作并返回预期结果,但第三个引发 TypeError 异常。

从这里我有两个问题:

  1. 如果加法有效, sum() 失败的原因是什么?
  2. 当我用 + 添加到对象时,会使用类的 __ add__ 方法。调用 sum() 时使用什么方法(如果有)?

Counter 只是一个例子,当我创建新类时,我对一般情况感兴趣,而不是对这个特别感兴趣。

from collections import Counter
from functools import reduce
a = Counter([1,1,1,1])

print(a+a+a)
print(reduce(lambda x, y: x + y, [a,a, a]))
sum([a, a, a])
Run Code Online (Sandbox Code Playgroud)

印刷:

Counter({1: 12})
Counter({1: 12})
Traceback (most recent call last):
  File "/home/user/.PyCharmCE2019.3/config/scratches/scratch.py", line 20, in <module>
    print(sum([a, a,]))
TypeError: unsupported operand type(s) for +: 'int' and 'Counter'
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
70
查看次数

标签 统计

python ×1