Apprenez a programmer en python

Page 164

Partie 3 : La Programmation Orientée Objet côté développeur

164/267

__iter__ de la chaîne, qui renvoie l'itérateur permettant de parcourir ma_chaine. On va ensuite appeler plusieurs fois la fonction next en lui passant en paramètre l'itérateur. Cette fonction appelle la méthode spéciale __next__ de l'itérateur. Elle renvoie successivement chaque lettre contenue dans notre chaîne et lève une exception StopIteration quand la chaîne a été parcourue entièrement. Quand on parcourt une chaîne grâce à une boucle for (for lettre in chaine:), c'est ce mécanisme d'itérateur qui est appelé. Chaque lettre renvoyée par notre itérateur se retrouve dans la variable lettre et la boucle s'arrête quand l'exception StopIteration est levée. Vous pouvez reprendre ce code avec d'autres objets conteneurs, des listes par exemple.

Créons nos itérateurs Pour notre exemple, nous allons créer deux classes : RevStr : une classe héritant de str qui se contentera de redéfinir la méthode __iter__. Son mode de parcours sera ainsi altéré : au lieu de parcourir la chaîne de gauche à droite, on la parcourra de droite à gauche (de la dernière lettre à la première). ItRevStr : notre itérateur. Il sera créé depuis la méthode __iter__ de RevStr et devra parcourir notre chaîne du dernier caractère au premier. Ce mécanisme est un peu nouveau, je vous mets le code sans trop de suspense. Si vous vous sentez de faire l'exercice, n'hésitez pas, mais je vous donnerai de toute façon l'occasion de pratiquer dès le prochain chapitre. Code : Python class RevStr(str): """Classe reprenant les méthodes et attributs des chaînes construites depuis 'str'. On se contente de définir une méthode de parcours différente : au lieu de parcourir la chaîne de la première à la dernière lettre, on la parcourt de la dernière à la première. Les autres méthodes, y compris le constructeur, n'ont pas besoin d'être redéfinies""" def __iter__(self): """Cette méthode renvoie un itérateur parcourant la chaîne dans le sens inverse de celui de 'str'""" return ItRevStr(self) # On renvoie l'itérateur créé pour l'occasion class ItRevStr: """Un itérateur permettant de parcourir une chaîne de la dernière lettre à la première. On stocke dans des attributs la position courante et la chaîne à parcourir""" def __init__(self, chaine_a_parcourir): """On se positionne à la fin de la chaîne""" self.chaine_a_parcourir = chaine_a_parcourir self.position = len(chaine_a_parcourir) def __next__(self): """Cette méthode doit renvoyer l'élément suivant dans le parcours, ou lever l'exception 'StopIteration' si le parcours est fini""" if self.position == 0: # Fin du parcours raise StopIteration self.position -= 1 # On décrémente la position return self.chaine_a_parcourir[self.position]

www.openclassrooms.com


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.