Python中能否重载is运算符?使MyClass() is None返回True
没办法实现这个需求
首先明确:Python里的is运算符不支持通过重载任何方法来修改行为,所以你没法让MyClass() is None返回True。
原因很直接:
is是用来比较两个对象的身份(内存地址),它的逻辑是直接对比对象的底层标识(对应id()的返回值),这个行为是Python解释器内置的,完全绕开了对象的方法调用。- 你创建的
MyClass()是一个全新的实例,它的内存地址和None这个单例对象的地址绝对不可能相同,所以is的结果永远是False。
你可能混淆了is和==:==运算符会调用对象的__eq__方法,如果你重载这个方法,可以让MyClass() == None返回True,比如:
class MyClass: def __eq__(self, other): return other is None print(MyClass() == None) # 输出 True print(MyClass() is None) # 输出 False
但is的逻辑是解释器层面硬定的,没有任何办法通过类的方法去篡改它的对比结果。
内容的提问来源于stack exchange,提问作者Doule_
相关产品推荐
相关产品推荐

