[Tutor] help with refactoring needed -- which approach
is morePythonic?
Kent Johnson
kent37 at tds.net
Thu Feb 10 11:52:51 CET 2005
Alan Gauld wrote:
>>The main change in refactoring is moving it to OOP. I have a method
>>that serves as the entry point for parsing the files.
>
>
> Not an object? If you are thinking terms of what the methods
> do its probably not OOP...
>
> I would expect to see an object for the File, another for the Header,
> a third for the Body and another for the Node. The first (containing
> a header and bosdy object) is responsible for cracking open the file
> and reading the lines, recognising where it has a header and sending
> those lines to the header object and the rest to the bosy object.
>
> The body object then reades those lines and creates a Node object
> per node feeding it lines as appropriate...
This is a reasonable approach. Having the Body and Node classes gives a handy place to put functions
to do something with that data. But I tend to take the Extreme Programming position of You Aren't
Going To Need It. I would probably stick with the list representation of Node, for example, until I
had some real work for the Node class to do.
It's definitely a judgement call when to introduce classes, there isn't a right way and a wrong way.
Some problems cry out for classes, some clearly have no need, and then there is a gray area in the
middle.
> Pseudo code:
> class Body:
> def __init__(self,content):
> self.contents = contents
> self.nodes = []
>
> def parse(self):
> for line in self.contents:
> if line == NodeStartTag:
> node = Node()
> if line == NodeEndTag:
> self.nodes.append(node)
> node.append(line)
>
> def __del__(self): del self.nodes
Why is 'del self.nodes' needed? When the Body is del'ed the reference to self.nodes should be lost
and the nodes list will be GC'd. Or am I missing something?
> class Node:
> def __init__(self,lines=[]):
> self.lines = lines
> def append(self,item):
> self.lines.append(item)
> def parse(self):
> # your parsing method here.
You might want to extend list so a Node automatically has the behavior of a list.
Kent
More information about the Tutor
mailing list