__contains__ 的作用是什么,什么可以调用 __contains__ 函数

64 投票
5 回答
141789 浏览
提问于 2025-04-15 17:23

这是我的代码:

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__ 方法定义了当类的实例出现在 innot 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是一个非空字符串,所以它是“真”的)。

撰写回答