覆盖Python的'in'运算符?

时间:2010-02-07 14:08:27

标签: python operator-overloading operators in-operator

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

class MyClass(object):
    ...

m = MyClass()

if 54 in m:
    ...

3 个答案:

答案 0 :(得分:210)

答案 1 :(得分:161)

更完整的答案是:

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  

请参阅documentation on overloading __contains__

答案 2 :(得分:7)

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

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