Définir des générateurs dans une classe Python
En plus de définir des fonctions génératrices, vous pouvez également définir des générateurs dans le contexte d'une classe Python. Cela peut être utile lorsque vous souhaitez encapsuler la logique du générateur dans une classe ou lorsque vous devez maintenir un état entre les appels du générateur.
Pour définir un générateur dans une classe Python, vous pouvez utiliser le mot - clé yield
à l'intérieur d'une méthode de la classe. Voici un exemple :
class NumberGenerator:
def __init__(self, start, end):
self.start = start
self.end = end
def generate_numbers(self):
for num in range(self.start, self.end + 1):
yield num
## Usage
num_gen = NumberGenerator(1, 10)
for num in num_gen.generate_numbers():
print(num)
Dans cet exemple, la classe NumberGenerator
a une méthode generate_numbers()
qui utilise le mot - clé yield
pour générer une séquence de nombres entre les valeurs start
et end
spécifiées dans le constructeur de la classe.
Pour utiliser le générateur, vous créez une instance de la classe NumberGenerator
, puis vous appelez la méthode generate_numbers()
, qui retourne un objet générateur sur lequel vous pouvez itérer.
Vous pouvez également définir plusieurs méthodes génératrices dans une classe, chacune avec sa propre logique et son propre état. Par exemple :
class TextGenerator:
def __init__(self, text):
self.text = text
def generate_words(self):
for word in self.text.split():
yield word
def generate_characters(self):
for char in self.text:
yield char
## Usage
text_gen = TextGenerator("The quick brown fox jumps over the lazy dog.")
print("Words:")
for word in text_gen.generate_words():
print(word)
print("\nCharacters:")
for char in text_gen.generate_characters():
print(char)
Dans cet exemple, la classe TextGenerator
a deux méthodes génératrices : generate_words()
et generate_characters()
. Chaque méthode génère une séquence différente de valeurs à partir du texte d'entrée.
En définissant des générateurs dans une classe, vous pouvez encapsuler la logique et l'état du générateur dans la classe, ce qui facilite la gestion et la réutilisation dans différentes parties de votre application.