python - 如何覆盖 python 的 "not in"运算符

标签 python python-3.x operator-overloading

我意识到__contains__是“in”运算符。我还意识到,默认情况下“不在”是 __contains__ 的否定。 。然而,很多 python 文档都列出了“not in”,就好像它是与“in”不同的运算符。是__contains__喜欢 __eq____ne__其中有两个运算符,一个通常是另一个的否定?如果是这样,正确的双下划线 __<name>__ 是什么?使用?

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

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

最佳答案

没有单独的“notcontains” Hook 。 innot in 不能单独覆盖。

存在单独的 __eq____ne__ Hook ,因为 ==!= 可能不会返回 bool 值。例如,您不能将 NumPy 数组的 != 实现为 not (x == y)not in 不存在这个问题,因为 innot in 都必须返回 bool 值。

如果你看data model documentation ,您会看到它只记录了 innot in 的单个 __contains__ 钩子(Hook)。您还可以查看implementation ,其中 innot in 都调用相同的 PySequence_Contains C API 函数,然后 not in 应用 ! 结果:

    case PyCmp_IN:
        res = PySequence_Contains(w, v);
        if (res < 0)
            return NULL;
        break;
    case PyCmp_NOT_IN:
        res = PySequence_Contains(w, v);
        if (res < 0)
            return NULL;
        res = !res;
        break;

关于python - 如何覆盖 python 的 "not in"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58675851/

相关文章:

python - 对于从 x(MOV、AVI 等)到 x 类型(MP4、MP2 等)的视频转换,哪种方法最好最快

python - "TypeError: Can' t 在 Python 中实例化抽象类

python - Django 休息框架 : Overwriting validation error keys

python - 在 Python 中分析内存分配(支持 Numpy 数组)

python - BeautifulSoup 没有正确读取文档

python - 在 Python 中从字符串中读取子字符串

python - 循环遍历 numpy 矩阵

c++ - 平等的定义

Python-向现有日期添加天数

c++ - C++ 中的直接赋值运算符