# 可迭代对象: list tuple dict set str range filter map
# for...in 可迭代对象
# for...in 循环的本质就是调用可迭代对象的 __iter__ 方法,获取到这个方法的返回值
# 这个返回值需要一个对象,然后再调用这个对象的 __next__ 方法
from collections.abc import Iterable
# class Foo(object):
# def __next__(self):
# return 1
class Demo(object):
def __init__(self,x):
self.x = x
self.count = 0
def __iter__(self): # 只要重写了 __iter__ 方法就是一个可迭代对象
# f = Foo()
return self
def __next__(self):
# 每次 for...in 都会调用 __next__方法,获取返回值
self.count += 1
if self.count <= self.x:
return self.count - 1
else:
raise StopIteration # 让迭代器停止
d = Demo(100)
print(isinstance(d,Iterable)) # isinstance 用来判断一个实例对象是否是由指定的类创建出来的
for i in Demo(10):
print(i)
# names = list('hello')
# print(isinstance(names,Iterable))
运行结果
True
0
1
2
3
4
5
6
7
8
9
Process finished with exit code 0