Programmation orientée objet intermédiaire en Python
Jake Roach
Data Engineer
Classes qui permettent de parcourir un ensemble d'objets ou un flux de données et retournent un élément à la fois
list, tuple, mais se comportent autrementfornext()$$
Protocole d'itérateur…
# Collection
chuck = NameIterator("Charles Carmicheal")
for letter in chuck:
print(letter)
C
h
u
...
# Flux de données
fun_game = DiceGame(rolls=3)
next(fun_game) # ... et ainsi de suite
4
__iter__()
... return self$$
__next__()
$$
__iter__() et __next__() doivent être définies pour qu'une classe soit un itérateur !
class CoinFlips:
def __init__(self, number_of_flips):
self.number_of_flips = number_of_flips # Conserver le nombre total de lancers
self.counter = 0
def __iter__(self):
return self # Retourner une référence de l'itérateur
# Lancer la prochaine pièce et retourner le résultat
def __next__(self):
if self.counter < self.number_of_flips:
self.counter += 1
return random.choice(["H", "T"])
three_flips = CoinFlips(3)
# Lancer la pièce trois fois
next(three_flips)
next(three_flips)
next(three_flips)
H
H
T
three_flips = CoinFlips(3)
# Maintenant, essayez de parcourir chaque élément de l'itérateur
for flip in three_flips:
print(flip)
T
H
T
None
None
None
...
...
def __next__(self):
# Faire ceci seulement si la pièce n'a pas été lancée "number_of_flips" fois
if self.counter < self.number_of_flips:
self.counter += 1
return random.choice(["H", "T"])
else: # Sinon, arrêter avec StopIteration
raise StopIteration
three_flips = CoinFlips(3)
# Maintenant, essayez de parcourir chaque élément de l'itérateur
for flip in three_flips:
print(flip)
H
T
H
while True:
try:
next(three_flips) # Obtenir le prochain élément de three_flips
# Intercepter l'exception StopIteration
except StopIteration:
print("Tous les lancers sont terminés !")
break
H
H
H
Tous les lancers sont terminés !
Programmation orientée objet intermédiaire en Python