38 lines
749 B
Python
38 lines
749 B
Python
"""
|
|
Sentence: iterate over words using the Iterator Pattern, take #2
|
|
|
|
WARNING: the Iterator Pattern is much simpler in idiomatic Python;
|
|
see: sentence_gen*.py.
|
|
"""
|
|
|
|
import re
|
|
import reprlib
|
|
|
|
RE_WORD = re.compile(r'\w+')
|
|
|
|
|
|
class Sentence:
|
|
|
|
def __init__(self, text):
|
|
self.text = text
|
|
|
|
def __repr__(self):
|
|
return f'Sentence({reprlib.repr(self.text)})'
|
|
|
|
def __iter__(self):
|
|
word_iter = RE_WORD.finditer(self.text) # <1>
|
|
return SentenceIter(word_iter) # <2>
|
|
|
|
|
|
class SentenceIter:
|
|
|
|
def __init__(self, word_iter):
|
|
self.word_iter = word_iter # <3>
|
|
|
|
def __next__(self):
|
|
match = next(self.word_iter) # <4>
|
|
return match.group() # <5>
|
|
|
|
def __iter__(self):
|
|
return self
|