Sentence 클래스의 다음 버전은 고전적인 반복자 패턴에 맞춰 구현하고, 리팩토링하면서 명확해지지만, 파이썬의 관용적인 방법은 아니다.
iter() 특별 메서드를 구현하고 있고, 이 메서드가 SentenceIterator를 반환하기 때문이다.
"""
반복형과 반복자의 차이 및 이 둘이 어떻게 명확히 보여주기 위해 다음과 같이 구현한다.
"""
import re
import reprlib
RE_WORD = re.compile('\w+')
class Sentence:
def __init__(self, text):
self.text = text
self.words = RE_WORD.findall(text)
def __repr__(self):
return 'Sentence(%s)' % reprlib.repr(self.text)
def __iter__(self):
return SentenceIterator(self.words)
class SentenceIterator:
def __init__(self,words):
self.words = words
self.index = 0
def __next__(self):
try:
word = self.words[self.index]
except IndexError:
raise StopIteration()
self.index += 1
return word
def __iter__(self):
return self