【问题标题】:Is there a way to overload += in python? [duplicate]有没有办法在python中重载+=? [复制]
【发布时间】:2010-10-18 05:17:29
【问题描述】:

我知道覆盖 plus 的 __add__ 方法,但是当我使用它覆盖 += 时,我遇到了两个问题之一:

(1) 如果__add__ 自身发生变异,那么

z = x + y

当我真的不希望 x 在那里发生变异时,将变异 x。

(2)如果__add__返回一个新对象,那么

tmp = z
z += x
z += y
tmp += w
return z

z += x 执行后,z 和 tmp 指向不同的对象,所以会返回不带 w 的东西。

我可以制作某种.append() 方法,但如果可能的话,我更愿意重载+=

【问题讨论】:

  • @tzot 在某种程度上,你在看 F'ing M。;-)
  • 您是否暗示 Josh 是 Python 的手动编写者之一?抱歉,我似乎不明白你的意思,@BobStein-VisiBone。
  • @tzot 我的意思是 Stack Overflow ,在很大程度上,Python 手册。这个页面比the one at docs.python.org 更容易找到。特别是如果您还不知道要搜索 __iadd__ 或“就地”添加术语。

标签: python operator-overloading


【解决方案1】:

是的。只需覆盖对象的__iadd__ 方法,该方法采用与add 相同的参数。您可以找到更多信息here

【讨论】:

  • +1:引用文档:-)
  • 类型必须匹配吗?即,如果我愿意,我可以 += 两种不同的类型吗?我不断收到异常,不确定是因为我做错了还是因为它永远不允许。文档在这方面非常薄弱。
猜你喜欢
  • 2022-12-05
  • 1970-01-01
  • 2018-02-04
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 2012-01-25
  • 2022-06-10
相关资源
最近更新 更多