【问题标题】:Why __add__ magic method does not work? [duplicate]为什么 __add__ 魔术方法不起作用? [复制]
【发布时间】:2017-11-05 03:26:38
【问题描述】:

我想更改 ADD python 魔术方法(我的意思是,__add__)来添加两个数字(代码 1)。当我运行代码时,输​​出等于 RecursionError: 在 Pycharm IDE 中调用 Python 对象时超出最大递归深度。但是在更改代码(代码 2)之后,新代码可以正常工作。为什么代码 1 不起作用?

代码 1(错误):

class Number(int):  
    def __add__(self, other):  
        return self + other
print(Number(5) + 3)    

代码 2(正确):

class Number(int):  
    def __add__(self, other):  
        return self - (-other)  
print(Number(5) + 3)

【问题讨论】:

  • 尝试:return self.__int__() + other 或:覆盖__radd__ 而不是覆盖__add__
  • 所以要将您的对象添加到另一个对象,您...添加两个对象?然后通过...添加这两个对象来添加这两个对象?然后你通过......你认为将你的方法定义为return self + other 会做什么?

标签: python


【解决方案1】:

它不起作用,因为selfNumber,所以self + other 调用self.__add__(other),它调用self + other,它调用...

解决方法是在添加之前将self 变成不是Number 的东西。

return int(self) + other

【讨论】:

  • 你知道,为什么“return self - (-other)”代码可以正常工作吗?
  • @RezaHarasani:减法调用__sub__()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
相关资源
最近更新 更多