2016-05-20 16 views
5

Czy jest dopuszczalne/Pythoniczne używanie metody w klasie jako generatora? Wszystkie znalezione przykłady pokazują deklarację zysku w funkcji, a nie w klasie.Czy metoda w klasie może być generatorem?

Oto przykładowy kod działa:

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

Przypuszczam, że większość przykładów to funkcje, ponieważ jest to prostsze; nie musisz być w klasie, więc nie jest pokazany. – jonrsharpe

Odpowiedz

15

Tak, to jest zupełnie normalne. Na przykład, jest powszechnie stosowany do wdrożenia object.__iter__() method:

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

jednak nie czują się ograniczone przez tego wspólnego wzoru; wszystko, co wymaga iteracji, jest kandydatem na metodę generatora.

+0

+1, że wzór iteratora jest dobrym przykładem. http://www.diveintopython3.net/ autorstwa Marka Pilgrima obejmuje niektóre z tego. –

Powiązane problemy