这是我的代码:
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)
该文档.
__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
Run Code Online (Sandbox Code Playgroud)
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__
在幕后调用方法的运算符.
让我们看一个魔术方法__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)