Alan Gauld said unto the world upon 2005-02-10 02:58:
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)
class Node: def __init__(self,lines=[]): self.lines = lines def append(self,item): self.lines.append(item) def parse(self): # your parsing method here.
Hi all,
YAQ (Yet Another Question):
Following the general pattern, I end up with a Body object which has an attribute .nodes that consists of a list of Node objects.
So, something like:
My Example Body Node List Node the first Node the second
Is there any way to make methods of the Node class access attributes of `parents' of instances? I would like a Node instance such as Node the first above to be aware just what it is a node of and what its siblings are.
You have to tell it the parent. ("Explicit is better than implicit.") For example you could pass a reference to Body to the Node in the constructor:
def parse(self): for line in self.contents: if line == NodeStartTag: node = Node(self) # HERE if line == NodeEndTag: self.nodes.append(node) node.append(line)
In general I think this is a bad design. I try to avoid telling components about their parents in any kind of containment hierarchy. If the component knows about its parent, then the component can't be reused in a different context and it can't be tested without creating the expected context.
Is there another way you could accomplish what you want?
Kent
Does this make sense?
Best to all,
Brian vdB
PS Thanks for the reply to my venting question, Kent.
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor