Hi all,

I'm uncertain of how to make use of OOP design across multiple modules. (Actually, on reflection, I'm not certain the multiple modules aspect is central.) I'm also uncertain of how to frame the question well, so please bear with me :-)

A schematic of what I have (with fake names for ease of example) is a base module Toolkit.py and I want to write a module Application.py which specializes the behaviour of the Toolkit.py classes. (I'm using old-style classes, but don't feel committed to that choice.)

Toolkit.py defines:

class Tree
class Node
class Node1(Node)
class Node2(Node)
(other Node subclasses, too, but I'm simplifying.)

The Tree class contains a parser method to parse a file. It reads the file, breaking it into chunks, and for each chunk, does the following:

if some_condition_on_chunk_contents:
    node = Node1(chunk_contents)
else:
    node = Node2(chunk_contents)

self.nodes.append(node)


Application.py will define

class Tree(Toolkit.Tree)
class Node(Toolkit.Node)
class Node1(Node, Toolkit.Node1)
class Node2(Node, Toolkit.Node2)

In all cases, a few methods will be added. I had no plans to override existing methods.

My problem is that I want Application.Tree.parser to create Application.Node1 and Application.Node2 instances when parsing a file. From testing around with simpler cases, it seems as though unless I override Toolkit.Tree.parser in Application.Tree, the inherited Tree.parser method will create Toolkit.Node1 and Node2 objects, which isn't what I want.

Toolkit.Tree.parser is my longest Tree method, and I definitely think it would be bad to just copy and paste the method def into Application.Tree so make the node = Node1(), etc. lines create an Application.Node1, etc. object.


The best I have come up with is to replace the Toolkit.Tree.parser lines of the form:
node = Node1(chunk_contents)
with lines like
node = self.get_Node1(chunk_contents)


and then have *both* Toolkit.Tree and Application.Tree define methods:

def get_Node1(self, chunk_contents):
    return Node1(chunk_contents)

(like lines and methods for Node2)

This works in my test case, but still involves Copy and Paste of the identical methods get_Node1 (and get_Node2) in both modules. Smelly. :-P

So, how can I make the lines like
node = Node1(chunk_contents)
of the Toolkit.Tree.parser method say something that means "create a Node1 instance where Node1 is as defined in the module that defines the instantiated Tree class" so that an instance of Application.Tree creates instances of Application.Node1? Is that doable? Or, is some other design indicated?


Thanks for making it to the end of the question! :-)

Best to all,

Brian vdB

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to