2016-05-20 5 views
5

Допустимо ли/Pythonic использовать метод в классе как генератор? Все примеры, которые я нашел, показывают оператор yield в функции, а не в классе.Может ли метод внутри класса быть генератором?

Вот пример рабочий код:

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

    def test(self): 
     for i in self.first_ten(): 
      print i 

SomeClass().test() 
+0

Я бы предположил, что большинство примеров - это функции, потому что это проще; вам не нужно быть в классе, поэтому он не отображается. – jonrsharpe

ответ

15

Да, это совершенно нормально. Например, он часто используются для реализации object.__iter__() method:

class SomeContainer(object): 
    def __iter__(self): 
     for elem in self._datastructure: 
      if elem.visible: 
       yield elem.value 

Тем не менее, не чувствует себя ограничивается этим общим рисунком; все, что требует итерации, является кандидатом на метод генератора.

+0

+1 что этот образец итератора - хороший пример. http://www.diveintopython3.net/ Марк Пилигрим рассказывает об этом. –

Смежные вопросы