__contains__ 的作用是什么,什么可以调用 __contains__ 函数
这是我的代码:
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
另外,您可以查看这个链接:如何重写Python的'in'运算符?,里面有相关的实现问题。
5 个回答
28
__contains__
方法定义了当类的实例出现在 in
和 not in
操作符的右侧时,它们的行为。
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def __contains__(self,param1):
return True if param1 in self.__dict__.keys() else False
>>> p = Person('Robby Krieger',23)
>>> 'name' in p
True
29
让你的代码做点事情(虽然没什么用):
class a(object):
d = 'ddd'
def __contains__(self, m):
if self.d:
return True
b = a()
>>> 'd' in b
True
可以参考一下文档。
104
像所有特殊方法一样(这些方法的名字是以__
开头和结尾的“魔法名字”),__contains__
并不是用来直接调用的(除非在一些特定的情况下,比如调用父类的方法)。这些方法通常是在内置操作和运算符的过程中被调用的。对于__contains__
来说,相关的运算符是in
,也就是用来检查某个东西是否包含在另一个东西里的运算符。
根据你提供的类a
(除了修正你的拼写错误,并且使用True
而不是true
!),以及b
作为它的实例,print 'x' in b
会输出True
——而且对b
的任何其他包含检查也会返回True
,因为b
总是返回True
(因为self.d
是一个非空字符串,所以它是“真”的)。