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

为何Python中5*"v"可行但int(5).__mul__("v")返回NotImplemented?

为什么int(5).__mul__("v")返回NotImplemented但5 * "v"正常工作?

Python的运算符重载遵循双向查找规则,这就是问题的核心:
当执行a * b这类运算符表达式时,Python会按以下步骤处理:

  1. 优先调用左操作数的__mul__方法,也就是a.__mul__(b)
  2. 如果该方法返回NotImplemented(表示左操作数不知道如何与右操作数完成乘法),Python会自动转向调用右操作数的__rmul__方法,也就是b.__rmul__(a)
  3. 只有当__rmul__也返回NotImplemented时,才会抛出TypeError报错

回到你的示例:

  • 执行5 * "v"时:
    1. 先调用int(5).__mul__("v"),但int类型的__mul__仅支持与数字相乘,所以返回NotImplemented
    2. Python随即触发反向查找,调用"v".__rmul__(5)。而字符串的__rmul__方法和__mul__逻辑完全一致,都是将字符串重复指定次数,因此返回'vvvvv'
  • 但直接调用int(5).__mul__("v")时,只是单独执行了int类型的乘法方法,没有触发后续的反向运算符查找逻辑,所以直接返回NotImplemented

简单来说,5 * "v"能工作是因为Python帮你自动尝试了字符串的反向乘法方法,而直接调用int的__mul__则跳过了这个关键步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:14