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

如何为Python类实现in运算符,支持字符串与对象列表的包含判断

如何让字符串和自定义对象列表使用in运算符进行比较?

当然可以实现你想要的效果!而且根本不存在什么__in__方法——Python的in运算符背后,是依赖容器的__contains__方法来工作的。对于列表来说,它的默认__contains__逻辑会逐个遍历列表元素,用==运算符比较元素和你要检查的值,所以只要给你的自定义类重写__eq__方法,就能达成目标。

默认情况下,自定义类的__eq__方法是比较对象的身份(也就是内存地址),所以你原来的代码里,'test' == bar会返回False,自然'test' in ls也不会触发打印。但重写__eq__后,我们可以定义自己的相等规则:

class Foo:
    def __init__(self, s):
        self.s = s
    
    def __eq__(self, other):
        # 先处理和字符串比较的情况
        if isinstance(other, str):
            return self.s == other
        # 保留和同类型对象比较的逻辑
        elif isinstance(other, Foo):
            return self.s == other.s
        # 其他类型直接返回不相等
        return False

bar = Foo('test')
ls = [bar]
if 'test' in ls:
    print("Yay!")  # 现在这段代码会正常输出啦!

这里有个小细节要注意:重写__eq__时尽量考虑全面,比如要兼容和其他Foo对象的比较,还要处理和非字符串、非Foo类型的比较,避免出现意外的相等判断。另外,如果之后你需要把Foo对象放进集合或者作为字典的键,记得同时重写__hash__方法(比如返回hash(self.s)),因为Python要求相等的对象必须有相同的哈希值,不然会出现逻辑问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:59:32