类型错误:iter() 返回了类型 'NoneType' 的非迭代器


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

相关内容

最新更新