class a(object):
def a(self):
return True
__contains__=a
b=a()
print 2 in b#why error
Run Code Online (Sandbox Code Playgroud)
__contains__ is meant to take an argument. a doesn't accept an argument.
The following is your example with a working __contains__:
>>> class a(object):
... def a(self, item):
... return True
... __contains__=a
...
>>> b=a()
>>> print 2 in b
True
Run Code Online (Sandbox Code Playgroud)