Modules, Packages and Developer Confusion. Oh My!

Steve Holden steve at holdenweb.com
Fri Nov 10 21:42:29 CET 2006


dhable at gmail.com wrote:
> I think I'm still missing something in how python is handling packages
> and it's mixing me up. I have a package with three files (modules?)
> like so:
> 
> OPS:\
>   __init__.py
>   model.py
>   search.py
> 
> To hide more details of the package structure, I import model and
> search inside of __init__. It also seemed like a good idea to define a
> global function that creates a database connection and I added it to
> __init__.py. Thus, I have:
> 
> 
> from model import *
> from search import *
> 
> def create_connection():
>   # details are unimportant for this example
> 
> 
> When I try to use the create_connection function in model, I get errors
> when I use it as a global function ( just create_connection()). The
> only way to resolve the error was to import OPS inside of model and use
> OPS.create_connection(). This doesn't seem natural. If model is part of
> OPS, why do I need to tell python to import OPS and use this function
> from OPS? I can see doing that from the outside world, but inside?
> 
> Any clarification would be greatly appreciated.
> 
The def statement binds the name create_connection in the model module's 
namespace to the function it defines. So you write EITHER

import model # puts model in the current namespace
conn = model.create_connection( ... )

OR

from model import * # copies model's namespace into current
conn = create_connection( ... )

Hope this helps.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Skype: holdenweb       http://holdenweb.blogspot.com
Recent Ramblings     http://del.icio.us/steve.holden




More information about the Python-list mailing list