2016-05-20 49 views
5

È accettabile/Pythonic utilizzare un metodo in una classe come generatore? Tutti gli esempi che ho trovato mostrano la dichiarazione di rendimento in una funzione, non in una classe.Un metodo all'interno di una classe può essere un generatore?

Ecco un codice funzionante esempio:

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

Direi che la maggior parte degli esempi sono funzioni perché è più semplice; non è necessario essere in una classe, quindi non viene mostrato. – jonrsharpe

risposta

15

Sì, questo è perfettamente normale. Ad esempio, è comunemente utilizzato per implementare un object.__iter__() method:

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

Tuttavia, non si sentono limitati da che modello comune; tutto ciò che richiede l'iterazione è un candidato per un metodo generatore.

+0

+1 che il pattern iteratore è un buon esempio. http://www.diveintopython3.net/ di Mark Pilgrim copre alcuni di questi. –