Python是否存在对应反射增量赋值的魔术方法?
关于Python增量赋值运算的方法调度问题解答
首先明确结论:不会。
普通非原地二元运算(例如a + b)的方法调度逻辑确实包含反射方法回退规则:当a.__add__(b)返回NotImplemented时,Python会自动尝试调用b.__radd__(a),只有当该方法也返回NotImplemented时才会最终抛出TypeError。
但增量赋值运算(例如你提到的a += b)的调度逻辑不存在这类回退设计:
+=对应的原地魔术方法为__iadd__,Python没有为增量赋值运算符定义对应的反射版本魔术方法(不存在__riadd__这类内置魔术方法)- 当
a.__iadd__(b)返回NotImplemented时,Python会直接抛出TypeError,不会尝试在操作数b上查找任何关联的反射方法完成运算。
你提到的__format__调用规则不属于二元运算符的反射调度范畴,是字符串格式化协议单独定义的专用调用规则,和运算符的方法调度逻辑是两套独立的实现。
内容的提问来源于stack exchange,提问作者S.Khajeh
相关产品推荐
相关产品推荐

