Module Structure/Import Design Problem

Arnaud Delobelle arnodel at googlemail.com
Thu Nov 20 02:06:27 EST 2008


Rafe <rafesacks at gmail.com> writes:

> 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:
>  - baselib.py   with  BaseClass
>  - types.py   with  TypeA, ...
>  - special.py   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?

It's not very clear what your problem is.  I guess your factory
functions are defined in baselib.py whereas types.py and special.py
import baselib, therefore you don't know how to make the factory
function aware of the types defined in special.py and types.py.

You can use cyclic import in many cases.

Or (better IMHO) you can make types register themselves with the factory
function (in which case it would have some state so it would make more
sense to make it a factory object).

-- 
Arnaud



More information about the Python-list mailing list