这里是我的代码:什么__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
这里是我的代码:什么__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
像所有的专用方法(用“魔法姓名”开始和在__
结束),__contains__
是不意味着直接调用(除非是非常特殊的情况下,诸如最多=调用父类):相当,这些方法被称为内建和操作员操作的一部分。在__contains__
的情况下,所述运营商是in
-“包含检查”运营商。
与您a
类,你目前它(除了固定的错字,并使用True
代替true
- !),并b
作为它的实例,print 'x' in b
将打印True
- 等等都会对b
任何其他围堵检查,因为b
总是返回True
(因为self.d
,非空字符串,为真)。
让你的代码做一些事情(虽然没什么用处):
class a(object):
d='ddd'
def __contains__(self, m):
if self.d: return True
b=a()
>>> 'd' in b
True
的docs。
if self.d:return true
self.d
是字符串'ddd'
。非空字符串始终是真实的:当您在'ddd'
上使用if
时,它总是会像您说的if True:
一样行事。
我想你大概的意思是:
def __contains__(self, item):
return item in self.d
in
是调用幕后__contains__
方法操作。
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
让我们看看魔术方法的一个很简单的例子__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