Ошибка теста итератора Python: TypeError: этот конструктор не принимает аргументов - PullRequest
0 голосов
/ 03 ноября 2018

пытается понять, как работает итератор. Ниже мой тест, но я получаю ошибку в 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)

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

исключение 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)
0 голосов
/ 03 ноября 2018

В вашем коде есть опечатка. Проверьте __int__ против __init__ в вашем Iter.

Из-за опечатки вы не определяете __init__ и поэтому используете значение по умолчанию, которое действительно не принимает аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...