bool
使用 bool(myobject)
的背后是调用我们定义的 myobject.__bool__()的结果
。如果未定义 bool,则会尝试调用
len()的结果,如果返回0,则
bool(myobject)` 的结果为 False,反之为 True。
contains(self, item)
这个特殊方法不会直接调用, 而是在使用 in
操作时调用
class test(object):
b='ddd'
def __contains__(self, item):
if item in self.b:
return True
else:
return False
m = test()
m.b = 'few'
print('d' in m)
因为我们更改了实例属性的值,所以返回值是 False
。
如果删去 __contains__
方法:
class test(object):
b='ddd'
m = test()
print('d' in m)
将出现错误:
Traceback (most recent call last):
File "I:/Program Code/Python/testing/mydict.py", line 18, in <module>
print('d' in m)
TypeError: argument of type 'test' is not iterable
由此我们也可以看出,可迭代类型均支持 in
操作,自定义类必须定义 __contains__
后才支持。
网友评论