2017-04-22 256 views
-1

覆盖_add_和_radd_时,当我尝试重写_add_和_radd_这样的:错误蟒蛇

class adding(): 
    def __init__(self, a): 
     self.a=a 

    def _add_(self,x): 
     self.a += x 
    def _radd_(self,x): 
     self.a += x  

我得到一个错误,当我尝试以下方法:

adding(1) + 1 
TypeError: unsupported operand type(s) for +: 'adding' and 'int' 

有谁知道在哪里我错了?

我想与+ X

编辑更新self.a值:

def _add_(self,x): 
    return adding(self.a + x) 
def _radd_(self,x): 
    return adding(self.a + x) 

抛出了同样的错误。

+2

没有什么神奇的* *约'_add_'。你想'__add__' –

+0

上帝,我忘了其中的一个。非常感谢。 –

+0

你应该评论这个,所以我可以将其标记为已解决。 –

回答

1

超负荷+迹象,我们需要实现的类__add__() 功能。拥有权利的同时也被赋予了重大的责任。我们 可以做任何我们喜欢的,在这个函数内。但是 返回一个坐标和的Point对象是明智的。

ref

您必须使用__add__

def __add__(self,x): 
+0

我没有这样做吗? –

+1

__!= _ :)您必须使用双下划线! – RaminNietzsche