from collections.abc import Iterable
from collections.abc import Iterator
class MyList(object):
def __init__(self): self.Container = [11, 22, 33]
def add(self, item): self.Container.append(item)
def __iter__(self): return MyIterator
class MyIterator(object):
def __init__(self): pass
def __next__(self): pass
def __iter__(self): pass
mylist = MyList()
mylist_iter = iter(mylist)
print(isinstance(mylist, Iterable))
print(isinstance(mylist, Iterator))
print(isinstance(mylist_iter, Iterable))
print(isinstance(mylist_iter, Iterator))
埃罗!回溯(最近一次调用):文件"D:Pythont.py",第19行Mylist_iter = iter(mylist)TypeError: iter()返回类型为type的非迭代器
为什么,如何解决这个问题?
为了实例化MyIterator对象,需要在MyIterator
后面加上括号:
def __iter__(self): return MyIterator()
您正在返回一个"类型"。对象(MyIterator),而不是MyIterator类的实际实例。
一个简单的例子:
# init an actual int type variable
>>> d = int()
>>> type(d)
<class 'int'> # its type is "int"
>>> d
0
# init what is essentially an alias for the int class
>>> d = int
>>> type(d)
<class 'type'> # its type is "type"
>>> d
<class 'int'>
# we can even use "d" in place of "int" now to initialize an integer
>>> d(234)
234