在Class里添加__contains__(self,x)函数可以在类的实例化对象上进行 in 操作.
class Graph():
def __init__(self):
self.items = {'a':1,'b':2,'c':3}
def __str__(self):
return '打印我干嘛'
def __contains__(self,x): # 判断一个定点是否包含在里面
return x in self.items
a = Graph()
print('a' in a) # 通过在类中添加 __contains__ , 可以实现 Class实例化的对象 进行 in 操作
print('d' in a) # 通过在类中添加 __contains__ , 可以实现 Class实例化的对象 进行 in 操作
>> True
>> False
迭代器:
实现了__iter__方法的就是迭代器,使用for循环遍历的时候,返回的其实就是可迭代对象,
实现了__next__方法的对象才是可迭代对象。
"""
创建一个迭代器对象
"""
class Container:
def __init__(self, start=0, end=0):
self.start = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.start < self.end:
self.start += 1
return self.start
else:
raise StopIteration
list,str为什么可以使用for循环迭代,是因为他们只实现了__iter__方法,没有实现__next__方法,所以他们是迭代器,但是不是可迭代对象,只不过是__iter__方法里面返回了一个可迭代对象,所以他们才可以被迭代。
"""
创建一个迭代器对象
"""
class Container:
def __init__(self, start=0, end=0):
self.start = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.start < self.end:
self.start += 1
return self.start
else:
raise StopIteration
class BiterList(object):
def __init__(self, start=0, end=0):
self.start = start
self.end = end
def __iter__(self):
return Container(self.start, self.end)



