Module Structure/Import Design Problem

Steve Holden steve at
Thu Nov 20 19:39:46 CET 2008

Rafe wrote:
> Hi,
> I am in a situation where I feel I am being forced to abandon a clean
> module structure in favor of a large single module. If anyone can save
> my sanity here I would be forever grateful.
> My problem is that classes in several modules share a common base
> class which needs to implement a factory method to return instances of
> these same classes.
> An example to help illustrate what I mean:
> Lets say I have the following modules with the listed classes:
>  -   with  BaseClass
>  -   with  TypeA, ...
>  -   with  SpecialTypeA, ...
> Which would be used a bit like this:
>>>> type_a = any_type_instance.get_type("TypeA")
>>>> special_type = type_a.get_type("SpecialTypeA")
> Again, I can get around this by dumping everything in to one module,
> but it muddies the organization of the package a bit. This seems like
> a problem that would come up a lot. Are there any design paradigms I
> can apply here?
Well a simple way to do this is to observe that even when a base class's
method is inherited by an instance of a subclass, when the method is
called the type of "self" is the subclass. And you can call the
subclass's type to create an instance. Perhaps the following  code would
make it more obvious:

$ cat
class Base(object):
    def factory(self, arg):
        return type(self)(arg)

sholden at lifeboy /c/Users/sholden/Projects/Python
$ cat
from baseclass import Base

class sub(Base):
  def __init__(self, arg):
    print "Creating a sub with arg", arg

s = sub("Manual")

thing = s.factory("Auto")
print type(thing)

sholden at lifeboy /c/Users/sholden/Projects/Python
$ python
Creating a sub with arg Manual
Creating a sub with arg Auto
<class '__main__.sub'>

Hope this helps.

Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC    

More information about the Python-list mailing list