我意识到__contains__
是“ in”运算符。我还意识到,默认情况下,“ not 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
答案 0 :(得分:4)
没有单独的“不包含”挂钩。 in
和not in
不能分别覆盖。
存在单独的__eq__
和__ne__
钩子,因为==
和!=
可能不返回布尔值。例如,不能将NumPy数组的!=
实现为not (x == y)
。 not in
没有这个问题,因为in
和not in
都必须返回布尔值。
如果您查看data model documentation,将会发现它仅记录了__contains__
和in
的单个not in
钩子。您还可以查看implementation,其中in
和not in
调用相同的PySequence_Contains
C API函数,然后not in
应用{{1} }转换为结果:
!