Itération sur une classe : surcharge de next et __iter__
Rappel : Itérateur
Un itérateur permet d'explorer une séquence en passant d'un élément à un autre
s= "bonjour"
for l in s:
print(l)
ce programme affiche toutes les lettres du mot "bonjour" avec une lettre par ligne.
Définition : Surcharge 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.
Exemple : Explorer 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__ :
class UnePhrase:
def __init__(self,l):
self.phrase = l
self.current = 0
def __next__(self):
liste_mot = self.phrase.split()
if self.current == len(liste_mot):
raise StopIteration
value = liste_mot[self.current]
self.current = self.current + 1
return value
def __iter__(self):
return self
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 :
p = UnePhrase("bonjour il fait beau")
for m in p:
print(m)
Le résultat est :