我试图了解它是如何__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__,需要尽可能保持通用.
是否有一种简单快捷的方法将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__在课堂上
在sum函数中,原型是sum(iterable [,start]),它将可迭代对象中的所有内容加上起始值相加.我想知道为什么这里有起始价值?有没有特定的用例需要这个值?
请不要再举例说明如何使用start.我想知道为什么它存在于这个函数中.如果sum函数的原型只是sum(可迭代),并且如果iterable为空则返回None,一切都会正常工作.那么为什么我们需要从这里开始呢?
我想编写一个python函数,使用+operator 添加所有参数.未指定参数数量:
def my_func(*args):
return arg1 + arg2 + arg3 + ...
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
最好的祝福