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

Python中NotImplemented在比较操作中的特殊行为问询

Python中NotImplemented在二元比较里的反直觉行为

嘿,刚好最近踩过这个坑,来给你唠唠Python里NotImplemented这个特殊值的门道~

首先得明确,NotImplemented是Python专门给二元特殊方法(比如__eq__、__add__、__lt__这类需要两个操作数的方法)准备的特殊常量。它的本职工作很简单:当一个对象的二元方法返回它时,就是在给解释器递话:“这个操作我搞不定,你去问问另一个操作数能不能处理”。

但重点来了!在二元比较场景(比如==、!=这些判断相等/不等的操作)里,它的表现简直反直觉——当比较双方的对应方法都返回NotImplemented时,最终结果会等价于True。

举个实打实的例子:io.BytesIO类并没有实现自己的__eq__方法,我们拿两个不同的BytesIO实例来做比较:

import io

encoded_jpg_io1 = io.BytesIO(b"sample_jpg_data")
encoded_jpg_io2 = io.BytesIO(b"sample_jpg_data")

print(encoded_jpg_io1 == encoded_jpg_io2)  # 输出 True

为啥会这样?拆解一下流程:

  1. 调用encoded_jpg_io1.__eq__(encoded_jpg_io2),因为类里没实现这个方法,返回NotImplemented;
  2. 解释器接着尝试调用encoded_jpg_io2.__eq__(encoded_jpg_io1),同样返回NotImplemented;
  3. 这时候Python的比较逻辑就会直接判定两者“相等”,返回True。

这和它在其他二元操作里的处理逻辑完全不一样——比如加法场景,如果双方的__add__/__radd__都返回NotImplemented,直接就抛出TypeError了,绝对不会默认返回个什么值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:32:53