2012-02-25 5 views
16

Wdrażam to, co zasadniczo jest obiektem kontenerowym (chociaż ma on trochę własnej logiki). Chcę móc iterować po elementach w polu w tej klasie (co jest zwykłą listą). Powinienem ponownie wdrożyć __iter__ i next dla mojej klasy, czy jest to dopuszczalne, aby wrócić iteracyjnej z listy, tak jak poniżej:Python - implementuj __iter__ lub zwróć listę __iter__

class X: 

    def __init__(self): 
     self.list = [] 

    def __iter__(self): 
     return self.list.__iter__() 

Jestem trochę pewności, czy będzie to prowadzić do niepożądanego zachowania.

Odpowiedz

22

Dobrze jest używać iteratora wbudowanego typu list. Sugeruję, aby nie wywołać __iter__() wyraźnie, choć raczej użyć wbudowanej funkcji iter():

def __iter__(self): 
    return iter(self.list) 

Inną opcją może być czerpać X od list. (W Pythonie 2.x powinieneś przynajmniej wywodzić się z object.)