基本构造1:
from collections import Iterable
class Classmate(object):
def __init__(self):
self.names = list()
def add(self,name):
self.names.append(name)
def __iter__(self):
# 1. 如果想要一个对象成为一个 可以迭代的对象,即可以使用for循环,那么必须使用__iter__()这个方法实现
return Demo(self) # 2.在第1步成立的前提下,调用iter方法得到一个xxxx.obj对象的__iter__方法的返回值
# 3.__iter__方法的返回值是一个迭代器
class Demo(object):
def __init__(self,obj):
self.obj = obj
self.carren_num = 0
def __iter__(self):
pass
def __next__(self):
# 迭代时通过__next__取值
if self.carren_num < len(self.obj.names):
ret = self.obj.names[self.carren_num]
self.carren_num += 1
return ret
else:
raise StopIteration
classmate = Classmate()
classmate.add("老王")
classmate.add("李三")
classmate.add("王五")
for temp in classmate:
print(temp)
# print(isinstance(classmate,Iterable))
简化构造:
from collections import Iterable
class Classmate(object):
def __init__(self):
self.names = list()
self.carren_num = 0
def add(self,name):
self.names.append(name)
def __iter__(self):
# 1. 如果想要一个对象成为一个 可以迭代的对象,即可以使用for循环,那么必须使用__iter__()这个方法实现
# 2.在第1步成立的前提下,调用iter方法得到一个xxxx.obj对象的__iter__方法的返回值
return self
# 3.__iter__方法的返回值是一个迭代器
def __next__(self):
# 迭代时通过__next__取值
if self.carren_num < len(self.obj.names):
ret = self.obj.names[self.carren_num]
self.carren_num += 1
return ret
else:
raise StopIteration
classmate = Classmate()
classmate.add("老王")
classmate.add("李三")
classmate.add("王五")
for temp in classmate:
print(temp)
# print(isinstance(classmate,Iterable))