Modules, Packages and Developer Confusion. Oh My!

Discussion in 'Python' started by dhable, Nov 10, 2006.

  1. dhable

    dhable Guest

    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.
     
    dhable, Nov 10, 2006
    #1
    1. Advertisements

  2. importing everything from "model" into "OPS" isn't the same thing as
    importing everything from "OPS" into "model".

    </F>
     
    Fredrik Lundh, Nov 10, 2006
    #2
    1. Advertisements

  3. dhable

    Steve Holden Guest

    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, Nov 10, 2006
    #3
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.