Почему я не могу использовать класс метода в качестве генератора? - PullRequest
0 голосов
/ 16 сентября 2018

Я в очень странной ситуации. Я знаю, что могу использовать класс метода в качестве генератора, как я делал это раньше. В этом другом вопросе Может ли метод в классе быть генератором? кто-то просит то же самое, и они говорят, что да, это может быть сделано.

Однако я получаю сообщение об ошибке, когда пытаюсь это сделать. Вот минимальный пример:

class SomeClass(object):
    def first_ten(self):
        for i in range(10):
            yield i

a = SomeClass();
next(a.first_ten)

Объект 'method' не является итератором

почему? Как это возможно? Спасибо Отредактировано: исправлено отступ кода

1 Ответ

0 голосов
/ 16 сентября 2018

Вам необходимо вызвать метод:

a = SomeClass()
it = a.first_ten()
next(it)

Причина этого в том, что сам метод не является генератором. Это функция генератора , которая возвращает новый генератор каждый раз, когда он вызывается.

То же самое относится и к функциям генератора, не относящимся к методам. Обратите внимание на типы в этом фрагменте:

>>> def f():
...     yield from range(10)
...
>>> type(f)
<class 'function'>
>>> type(f())
<class 'generator'>
...