[Tutor] Style question with classes and modules

Kent Johnson kent37 at tds.net
Thu Jul 19 21:27:49 CEST 2007


Tino Dai wrote:
> Hi there Everybody,
> 
>        I have style question with importing of modules and classes. 
> Presently, I have several files importing several modules.
> 
> #apacheModule
> import dbBase
> import dbCommon
> import miscBase
> 
> My question is there any advantage to me wrapping them in a single file 
> (wrapper), and the importing a single file
> into that file (barring namespace collisons). Example shown below:
> 
> In aggreateBase:
> import dbBase
> import dbCommon
> import miscBase
> 
> In apacheModule:
> import aggreateBase
> # instead of
> #import dbBase
> #import dbCommon
> #import miscBase

Then you will have to refer to aggreateBase.dbBase.somethingInDbBase 
which is a bit awkward. BTW I think you mean aggregateBase?

> or perhaps even
> In aggreateBase:
> from dbBase import dbBase
> from dbCommon import dbCommon
> from miscBase import miscBase

This is pretty commonly done in a package __init__.py to promote names 
to package scope. So you might have
/mypackage/
   __init__.py
   stuff.py
     class foo...
   nonsense.py
     class bar...

If __init__.py is empty then in a client you have to write e.g.
   from mypackage.stuff import foo

If __init__.py contains
   from stuff import *
   from nonsense import *

then a client can say
   from mypackage import foo

If your modules are related and belong together in a package then this 
can be handy. I wouldn't use it to group unrelated modules though.

Using from xx import * does obscure the true location of an object.

> The two advantages that I can see are, I don't need to type as much, and 
> there would be a speed up in the execution of code.

Why do you expect a speedup?

> Is there a reason why I shouldn't?

If they belong together, put them in a package and use __init__.py. if 
they don't belong together you are just obscuring the design for very 
little savings.

Kent


More information about the Tutor mailing list