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
为啥会这样?拆解一下流程:
- 调用
encoded_jpg_io1.__eq__(encoded_jpg_io2),因为类里没实现这个方法,返回NotImplemented; - 解释器接着尝试调用
encoded_jpg_io2.__eq__(encoded_jpg_io1),同样返回NotImplemented; - 这时候Python的比较逻辑就会直接判定两者“相等”,返回
True。
这和它在其他二元操作里的处理逻辑完全不一样——比如加法场景,如果双方的__add__/__radd__都返回NotImplemented,直接就抛出TypeError了,绝对不会默认返回个什么值。
内容的提问来源于stack exchange,提问作者Eypros
相关产品推荐
相关产品推荐

