这是我的代码:

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

答案

像所有特殊方法一样(带有"魔术名称"开始和结束__),__contains__not 打算直接调用(在非常具体的情况下,例如UP =对超类的调用):相反,此类方法被称为内置和操作员操作的一部分。如果是__contains__,有问题的操作员是in——“收容检查"操作员。

和你的课a在您提出的时(除了修复错字,并使用True代替true!-), 和b作为实例,print 'x' in b会打印True - 任何其他遏制都会检查b, 自从b总是返回True(因为self.d,一个非空字符串是正确的)。

来自: stackoverflow.com