2016-05-20 37 views
5

Bir sınıftaki bir yöntemi bir jeneratör olarak kullanmak kabul edilebilir/Pythonic midir? Bulduğum tüm örnekler, bir sınıfta değil, bir işlevde getiri ifadesini gösterir.Bir sınıf içinde bir yöntem jeneratör olabilir mi?

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

Çoğu örnekte fonksiyonlar olduğunu tahmin ediyorum çünkü bu daha basit; Bir sınıfta olmanıza gerek yok, bu yüzden gösterilmez. – jonrsharpe

cevap

15

Evet, bu tamamen normaldir:

İşte bir örnek çalışma koddur. Örneğin, yaygın bir object.__iter__() method uygulamak için kullanılır: bu ortak modeliyle sınırlı hissetmiyorum Ancak

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

; Yinelemeyi gerektiren her şey, bir jeneratör metodu için adaydır.

+0

+ 1, yineleyici modelinin iyi bir örnektir. Mark Pilgrim tarafından http://www.diveintopython3.net/ bunlardan bazıları kapsar. –

İlgili konular