Itération sur une classe : surcharge de next et __iter__

RappelItérateur

Un itérateur permet d'explorer une séquence en passant d'un élément à un autre

1
s= "bonjour"
2
for l in s:
3
    print(l)
4

ce programme affiche toutes les lettres du mot "bonjour" avec une lettre par ligne.

DéfinitionSurcharge de la méthode next et __iter__

La méthode __iter__ permet l'accès à itérateur. Cela est nécessaire pour être utilisés avec les instructions for et in.

la méthode next permet de passer à l'élément suivant de l'objet (ou conteneur). S'il n'y a pas d'autres éléments, la règle demande de lever une exception StopIteration afin dêtre compatible avec la boucle for.

ExempleExplorer tous les mots d'une phrase

La classe UnePhrase permet de passer d'un mot à l'autre en surchargeant les méthodes next et __iter__ :

1
class UnePhrase:
2
    def __init__(self,l):
3
        self.phrase = l
4
        self.current = 0
5
    def __next__(self):
6
        liste_mot = self.phrase.split()
7
        if self.current == len(liste_mot):
8
            raise StopIteration
9
        value = liste_mot[self.current]
10
        self.current = self.current + 1
11
        return value 
12
    def __iter__(self):
13
        return self
14

La méthode split permet de créer une liste à partir des mots de la chaine de caractères séparés par un symbole espace.

Le programme permet d'utiliser les surcharges faites :

1
p = UnePhrase("bonjour il fait beau")
2
for m in p:
3
    print(m)

Le résultat est :