Decorator Pattern with Iterator
Ian Kelly
ian.g.kelly at gmail.com
Mon Jun 11 11:57:00 EDT 2012
On Mon, Jun 11, 2012 at 1:51 AM, Tom Harris <celephicus at gmail.com> wrote:
> Greetings,
>
> I have a class that implements the iterator protocol, and tokenises a string
> into a series of tokens. As well as the token, it keeps track of some
> information such as line number, source file, etc.
So each processor needs to be able to access that information? A
decorator pattern for the processors to propagate that information
down might look like this:
class TokenProcessor(object):
def __init__(self, processor):
self._processor = processor
def __call__(self, tokens):
self._tokens = tokens
return self._processor(tokens)
@property
def line_number(self):
return self._tokens.line_number
@property
def source_file(self):
return self._tokens.source_file
@TokenProcessor
def processor(tokens):
for token in tokens:
line_number = tokens.line_number
do_stuff(token, line_number)
yield token
for token in processor_1(processor_2(tokeniser)):
do_more_stuff(token)
More information about the Python-list
mailing list