这是我的代码:
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
,一个非空字符串是正确的)。