yuyan
yuyan

Reputation: 19

How to define __contains__ in a Python class

class NewClass:

    def __init__(self, a):
        self.a = a

    def __contains__(self, item):

        # ???

how to write # ??? to enable:

x in list_of_NewClassObject

and return True or False.

Upvotes: 0

Views: 1362

Answers (1)

Vincent
Vincent

Reputation: 13415

As @PeterWood pointed out, you probably want to define __eq__ instead:

class NewClass(object):

    def __init__(self, a):
        self.a = a

    def __eq__(self, item):
        if isinstance(item, NewClass):
            return self.a == item.a
        return object.__eq__(self, item)

    def __ne__(self, item):
        return not self.__eq__(item)

    def __hash__(self):
        return hash(self.a)

Example:

>>> a = NewClass(1)
>>> b = NewClass(2)
>>> x = NewClass(1)
>>> x in [a, b]
True

Upvotes: 2

Related Questions