重载Python的'in'运算符?

290 投票
3 回答
114826 浏览
提问于 2025-04-15 18:59

如果我在Python中创建自己的类,我应该定义哪个函数,以便可以使用 in 操作符,比如说:

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...

另外,可以查看 __contains__ 是做什么的,它可以被谁调用,了解关于 __contains__ 的相关问题。

3 个回答

3

另一种实现你想要的逻辑的方法是使用 __iter__

如果你没有重写 __contains__,那么 Python 会使用 __iter__(如果你重写了它的话)来检查你的数据结构中是否包含指定的值。

276

更完整的答案是:

class MyClass(object):

    def __init__(self):
        self.numbers = [1,2,3,4,54]

    def __contains__(self, key):
        return key in self.numbers

在这里,当你问54是否在m里面时,你会得到True

>>> m = MyClass()
>>> 54 in m
True  

查看关于重载__contains__文档

358

MyClass.__contains__(self, item)

这个内容提到的是一个叫做 `__contains__` 的方法,它是 Python 中用来检查某个东西是否在一个对象里的。简单来说,如果你有一个自定义的类,比如 `MyClass`,你可以用这个方法来判断某个特定的项目(`item`)是否存在于这个类的实例中。这个方法通常会在你使用 `in` 关键字时被自动调用,比如说你想检查某个元素是否在一个列表或集合里。

撰写回答