试图了解迭代器的工作方式。以下是我的测试,但在Iter(self)中出现错误-TypeError:此构造方法不接受任何参数。谁能帮我?非常感谢。
class TestIter:
def __init__(self, value):
self.value = value
def __iter__(self):
return Iter(self)
class Iter:
def __int__(self, source):
self.source = source
def next(self):
if self.source.value >= 10:
raise StopIteration
else:
self.source.value += 1
return self.source.value
test = TestIter(5)
for i in test:
print(i)
答案 0 :(得分:0)
您的代码中有错字。在您的__int__
中检查__init__
与Iter
。
由于输入错误,您没有定义__init__
,因此使用了默认值,它实际上没有参数。
答案 1 :(得分:0)
例外TypeError
在将操作或功能应用于 不适当类型的对象。关联值是一个字符串 提供有关类型不匹配的详细信息。
在您的情况下,应该是__int__
是__init__
。只是建议,与其使用这种复杂的方法来构建迭代器,不如简单地使用一个类并直接调用它。
示例:
class Count:
"""Iterator that counts upward forever."""
def __init__(self, start):
self.num = start
def __iter__(self):
return self
def __next__(self): // This will go to infinity but you can applyyour own logic to
num = self.num
self.num += 1
return num
可以通过以下任一方式进行呼叫:
>>> c = Count()
>>> next(c)
0
或者这个:
>>> for n in Count():
... print(n)
...
0
1
2
(this goes on forever)