2009-12-27 71 views

回答

25

像所有的专用方法(用“魔法姓名”开始和在__结束),__contains__意味着直接调用(除非是非常特殊的情况下,诸如最多=调用父类):相当,这些方法被称为内建和操作员操作的一部分。在__contains__的情况下,所述运营商是in-“包含检查”运营商。

与您a类,你目前它(除了固定的错字,并使用True代替true - !),并b作为它的实例,print 'x' in b将打印True - 等等都会对b任何其他围堵检查,因为b总是返回True(因为self.d,非空字符串,为真)。

10

让你的代码做一些事情(虽然没什么用处):

class a(object): 
    d='ddd' 
    def __contains__(self, m): 
     if self.d: return True 
b=a() 

>>> 'd' in b 
True 

docs

8
if self.d:return true 

self.d是字符串'ddd'。非空字符串始终是真实的:当您在'ddd'上使用if时,它总是会像您说的if True:一样行事。

我想你大概的意思是:

def __contains__(self, item): 
    return item in self.d 

in是调用幕后__contains__方法操作。

6

contains方法定义了当类的实例出现在in的右侧而不是在operator时的行为。

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 
5

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

假设我有一流的球员和我__init__方法接受一个字符串参数。主要我创建了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 
相关问题