__contains__做了什么,可以调用__contains__函数

zjm*_*126 30 python

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 46

像所有的专用方法(用"魔法姓名"开始和结束__),__contains__不是意味着要直接调用(除非是非常特殊的情况下,诸如最多=调用父类):确切地说,这种方法被称为的一部分内置插件和操作员的操作.在这种情况下__contains__,有问题的操作员是in- "收容检查"操作员.

随着你的课程a提出它(除了修复你的错字,而True不是使用true! - ),并且b作为它的实例,print 'x' in b将打印True- 所以任何其他包容检查b,因为b总是返回True(因为self.d,非空)字符串,是真的).


cob*_*bal 12

让你的代码做某事(虽然没有用):

class a(object):

    d = 'ddd'

    def __contains__(self, m):
        if self.d: 
            return True

b = a()

>>> 'd' in b
True
Run Code Online (Sandbox Code Playgroud)

文档.


vij*_*ker 9

__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  
Run Code Online (Sandbox Code Playgroud)

  • 更简单地说,你可以为`__contains__`编写:`return param1 in self.__dict__.keys()` (10认同)

bob*_*nce 8

if self.d:return true
Run Code Online (Sandbox Code Playgroud)

self.d是字符串'ddd'.非空字符串总是很简洁:当你使用它时if,'ddd'它总会表现得像你说的那样if True:.

我想你的意思是:

def __contains__(self, item):
    return item in self.d
Run Code Online (Sandbox Code Playgroud)

in__contains__在幕后调用方法的运算符.


N R*_*awa 6

让我们看一个魔术方法__contains__的一个非常简单的例子:

假设我有类Player,我的__init__方法接受一个字符串参数名称.在main中我创建了一个Player类的对象(obj1).

现在,如果我想知道我的obj1(在本例中是obj1的属性名称)是否包含特定字符串,子字符串或字母,我必须实现__contains__方法,如示例所示.

如果我的类有__contains__方法,我可以在我的自定义对象上调用内置运算符,如示例所示.

   class Player():

    def __init__(self, name):
        self.name=name

    def __contains__(self, substring):
        if substring in self.name:
            return True
        else:
            return False

obj1=Player("Sam")
print ('am' in obj1)    ----> True
print ('ami' in obj1)   ----> False
Run Code Online (Sandbox Code Playgroud)