覆盖Python的'in'运算符?

ast*_*rog 177 python operator-overloading operators in-operator

如果我在Python中创建自己的类,我应该定义什么函数以允许使用'in'运算符,例如

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...
Run Code Online (Sandbox Code Playgroud)

pth*_*lin 177

更完整的答案是:

class MyClass(object):

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

    def __contains__(self, key):
        return key in self.numbers
Run Code Online (Sandbox Code Playgroud)

在询问54是否在m时,你会得到True:

>>> m = MyClass()
>>> 54 in m
True  
Run Code Online (Sandbox Code Playgroud)

请参阅有关重载的文档__contains__.

  • @PEter.是啊,但是我们中的一些人更喜欢一个很好的视觉表达答案.伊格纳西奥除了把我们放在这里而不是谷歌之外没什么好处,除了谢谢你. (15认同)
  • 所有,链接死亡,这就是为什么伊格纳西奥的答案在SO上不稳定.链接+示例是最好的,这就是为什么我们所讨论的两个答案的组合是最好的. (13认同)

小智 7

您可能还想查看我能够用来创建特定于域的语言的中缀运算符覆盖框架:

http://code.activestate.com/recipes/384122/