the next is my code:
class a(object):
d='ddd'
def __contains__(self):
if self.d:return true
b=a()
print b.contains('d')#error
print contains(b,'d')#error
thanks
the next is my code:
class a(object):
d='ddd'
def __contains__(self):
if self.d:return true
b=a()
print b.contains('d')#error
print contains(b,'d')#error
thanks
if self.d:return true
self.d is the string 'ddd'. Non-empty strings are always truthy: when you use if on 'ddd' it will always act as if you'd said if True:.
I think what you probably meant is:
def __contains__(self, item):
return item in self.d
in is the operator that calls the __contains__ method behind the scenes.
Like all special methods (with "magic names" that begin and end in __), __contains__ is not meant to be called directly (except in very specific cases, such as up=calls to the superclass): rather, such methods are called as part of the operation of built-ins and operators. In the case of __contains__, the operator in question is in -- the "containment check" operator.
With your class a as you present it (except for fixing your typo, and using True instead of true!-), and b as its instance, print 'x' in b will print True -- and so will any other containment check on b, since b always returns True (because self.d, a non-empty string, is true).