相关疑难解决方法(0)

覆盖__add__方法后出现TypeError

我试图了解它是如何__add__工作的:

class MyNum:
    def __init__(self,num):
        self.num=num
    def __add__(self,other):
        return MyNum(self.num+other.num)
    def __str__(self):
        return str(self.num)
Run Code Online (Sandbox Code Playgroud)

如果我把它们放在一个清单中

d=[MyNum(i) for i in range(10)]
Run Code Online (Sandbox Code Playgroud)

这很有效

t=MyNum(0)
for n in d:
    t=t+n
print t
Run Code Online (Sandbox Code Playgroud)

但这不是:

print sum(d)
TypeError: unsupported operand type(s) for +: 'int' and 'instance'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我怎样才能得到sum()

UPDATE

我的问题是如何在支持的对象列表上使用总和__add__,需要尽可能保持通用.

python

35
推荐指数
2
解决办法
3万
查看次数

python的sum()和非整数值

是否有一种简单快捷的方法将sum()与非整数值一起使用?

所以我可以像这样使用它:

class Foo(object):
    def __init__(self,bar)
        self.bar=bar

mylist=[Foo(3),Foo(34),Foo(63),200]
result=sum(mylist) # result should be 300
Run Code Online (Sandbox Code Playgroud)

我试着重写__add____int__等,但我没有找到一个解决办法

编辑:

解决方案是实现:

 def __radd__(self, other):
    return other + self.bar
Run Code Online (Sandbox Code Playgroud)

正如威尔在他的帖子中所说.但一如既往,所有道路都通往罗马,但我认为这是最好的解决方案,因为我不需要__add__在课堂上

python sum list

25
推荐指数
5
解决办法
2万
查看次数

为什么在python的内置sum函数中有一个start参数

sum函数中,原型是sum(iterable [,start]),它将可迭代对象中的所有内容加上起始值相加.我想知道为什么这里有起始价值?有没有特定的用例需要这个值?

请不要再举例说明如何使用start.我想知道为什么它存在于这个函数中.如果sum函数的原型只是sum(可迭代),并且如果iterable为空则返回None,一切都会正常工作.那么为什么我们需要从这里开始呢?

python

9
推荐指数
1
解决办法
1816
查看次数

如何编写一个添加所有参数的python函数?

我想编写一个python函数,使用+operator 添加所有参数.未指定参数数量:

def my_func(*args):
    return arg1 + arg2 + arg3 + ...
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

最好的祝福

python arguments function add

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

标签 统计

python ×4

add ×1

arguments ×1

function ×1

list ×1

sum ×1