重写 __add__ 方法后出现类型错误

2024-01-21

我想了解如何__add__ works:

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)

如果我把它们列在一个列表中

d=[MyNum(i) for i in range(10)]

这有效

t=MyNum(0)
for n in d:
    t=t+n
print t

但这并不:

print sum(d)
TypeError: unsupported operand type(s) for +: 'int' and 'instance'

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

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


你需要定义__radd__以及让它发挥作用。

__radd__ is 反向添加。当Python尝试计算时x + y它首先尝试调用x.__add__(y)。如果失败则返回到y.__radd__(x).

这允许您仅通过触摸一个类来覆盖加法。例如,考虑 Python 如何评估0 + x。致电0.__add__(x)已尝试但是int对你的班级一无所知。你不能很好地改变__add__中的方法int,因此需要__radd__。我认为这是依赖倒置的一种形式。

正如史蒂文指出的那样,sum就地操作,但从 0 开始。因此第一个加法是唯一需要使用的加法__radd__。作为一个很好的练习,您可以检查情况是否如此!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重写 __add__ 方法后出现类型错误 的相关文章

随机推荐

  • 为什么 ui.item.attr("id") 返回未定义的值?

    我正在处理之间的可排序 li of ul 但当我试图得到ui item attr id 我未定义 但其他变量运行良好 例如 this attr id and ui sender attr id 但我正在搜索的索引 ul 元素从哪里拖动 我的
  • Rails Gem Devise 是否有解决方案允许用户拥有多个电子邮件?

    我正在寻找一种解决方案 允许我的应用程序上的用户拥有超过 1 封电子邮件 这应该与 Facebook LinkedIn 和 Quora 类似 一个帐户可以有多个电子邮件地址 其中 1 个作为主要电子邮件地址 是否有可用的设备交钥匙解决方案
  • 正确的 ARIA 处理面包屑导航

    可以采取哪些措施来提高面包屑菜单的可访问性 类似于 ul class breadcrumbs li a href Home a li li a href news News a li li class unavailable a href
  • Blazor - Web 组件 - WebAssembly - 微前端

    我正在研究微前端并能够使用不同技术构建功能 到目前为止 创建 Web 组件并在 Monolith 上使用它们是我发现的最佳方法 研究创建 Web 组件并在不同服务中提供模块的不同方法是一种有趣的体验 使用 Blazor 查看 WebAsse
  • 为什么添加简单的 SQL 查询作为 Power BI 数据源会阻止本机查询折叠?

    我已经添加了SQL数据源 然后 我没有选择表 而是输入了以下查询 SELECT ID NAME AGE FROM STUDENTS 当我右键单击该步骤时 我看到本机查询选项被禁用 为什么添加简单的 SQL 查询作为 Power BI 数据源
  • MS Access 准备好的语句

    是否可以在 MS Access 中对 VBA 中的本地表执行准备好的语句 如下所示 UPDATE part SET part description WHERE part id 如果是这样 它是如何完成的 Dim db As DAO Dat
  • Java 正则表达式帮助:捕获键值对

    我正在尝试从具有以下形式的字符串中捕获键值对 a0 d235 a1 2314 com1 abcd com2 a b c d 使用来自的帮助这个帖子 https stackoverflow com questions 168171 regul
  • iOS - 循环单元格并检索数据

    抱歉 我对 iOS 开发还很陌生 我有一个UITableView从单个 XiB 笔尖拉出的单元进行设置 我在笔尖中创建了一个开 关开关 并且我试图保存开关的状态viewWillDisappear我拥有的细胞数量 准确地说是 6 个单元 如何
  • C# 中的 MemoryStream Xml 架构验证失败

    这是我的功能 如果将 MemoryStream 传递给 XmlReader 有时它不会验证正确的 xml 文件 我将 XmlDocument 对象存储在内存中 我想根据最终用户提供的 xsd 架构文件对其进行验证 ValidateSchem
  • 如果 .slideDown 超出浏览器底部,如何自动向上滚动页面?

    我有一个表格 当鼠标悬停在行上时 通过 jQuery SlideDown 显示每行的附加信息 当鼠标移开时 信息将通过向上滑动删除 这工作得很好 但是当我将鼠标悬停在页面上的最后一个项目上时 它会滑到浏览器窗口底部下方 如果用户使用鼠标滚轮
  • jar 清单中的绝对路径名与相对路径名

    我想引用固定位置的 jar 文件以供多个可执行 jar 文件使用 而不是在每个可执行文件中包含该 jar 文件 我有以下设置 效果很好 commons math3 3 6 1 jar 存在于目录 testgradle 中 TestGradl
  • 使用寄存器值作为搜索模式

    我希望使用寄存器的内容作为 Vim 中的搜索模式 我想从命令行执行此操作 因此我无法使用
  • Spring - AOP:@within异常:java.lang.IllegalArgumentException:错误引用的类型不是注释类型

    我是 AOP 和 AspectJ 的新手 我正在尝试围绕具有元素类型的自定义注释编写自定义逻辑TYPE 我还想使用注释下的参数在 around 方法内编写自定义逻辑 我收到下面提到的错误 我尝试阅读多个来源 大多数来源都与使用有关 anno
  • 如何在单元格中显示当前用户名?

    在我能找到的大多数在线资源中 通常会告诉我如何在 VBA 中检索此信息 有没有直接的方法可以在单元格中获取这些信息 例如 简单如 ENVIRON User 这没有用 根据下面链接中的说明 执行以下操作 在 VBA 中插入一个新模块并粘贴以下
  • 使用 javamail 发送邮件不起作用

    我正在尝试使用我的 Gmail 地址发送电子邮件 我将 debug 设置为 true 这就是我得到的 DEBUG JavaMail version 1 4 1 DEBUG not loading file System Library Ja
  • 如何使用 heroku CLI 避免使用 --app 选项?

    我厌倦了每次运行时输入应用程序的名称heroku终端中的命令 heroku run rake db migrate app myapp heroku run rake db seed app myapp heroku run rake st
  • 离子闪屏(错误:无法读取上传的图像)

    我正在尝试使用 ionic resources splash 命令 我在资源文件夹以及 ios 和 android 文件夹的根目录中保存了一个 flash png 文件 其尺寸为 2208 x 2208 这是建议的大小 但是当我运行命令时出
  • 类别和继承有什么区别和用途? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective c中继承和类别的区别 https stackoverflow com questions 522341 difference between inheritance and cat
  • JSON 数据到 Web 服务 - 如何定义预期的 JSON 数据

    我正在 PHP 中构建一个 RESTful Web 服务 接受 JSON 作为其有效负载 现在 我的问题是 如何向用户准确描述 JSON 请求的格式 我对 JSON 很陌生 不认为我 100 掌握了 其他用户系统基本上会创建一个包含我需要的
  • 重写 __add__ 方法后出现类型错误

    我想了解如何 add works class MyNum def init self num self num num def add self other return MyNum self num other num def str s