You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中__add__隐式实现__iadd__的源码与文档位置查询

问题与解答

问题描述

给出如下Python类定义:

class S:
    def __init__(self, n):
        self.n = n

    def __add__(self, other):
        self.n = self.n + other.n
        return self

以及REPL交互会话:

>>> s10 = S(10)
>>> s20 = S(20)
>>> s10 += s20

观察到实现了__add__方法的类会隐式支持+=操作,逻辑等价于自动实现如下__iadd__方法:

def __iadd__(self, other):
    return self.__add__(other)

疑问:该行为在Python源码中的定义位置?官方文档哪部分有提及?(注:《3. 数据模型》章节未说明此行为)

解答

一、Python源码中的定义位置

该隐式逻辑在CPython的核心对象操作代码中实现,具体位于:

  • 原地操作符(如+=)的处理入口是Objects/abstract.c文件中的PyNumber_InPlaceAdd函数。
  • 函数逻辑为:优先检查对象是否实现了__iadd__方法;若未找到,则调用PyNumber_Add(对应__add__方法的底层实现),再将__add__的返回值赋值给原变量。如果__add__返回对象自身,就会表现为原地修改的效果。

二、官方文档的提及位置

该行为在**《Python语言参考》的6.3.2. 原地操作符**章节中有明确说明,核心内容为:

原地操作符(例如+=)会首先尝试调用对应的原地特殊方法(例如__iadd__)。如果对象未实现该方法,操作符会转而调用对应的二元特殊方法(例如__add__),然后将结果赋值给左操作数。

内容的提问来源于stack exchange,提问作者BramAppel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:10:35