[Python-Dev] Relative import

Devin devin at whitebread.org
Tue Dec 23 13:45:18 EST 2003


On Tue, 23 Dec 2003, Ken Manheimer wrote:

> > This flowed well in my head, and looks natural.  However, the suggestion
> > about '.' or '..' referring to the parent looks _ugly and unnatural_.
> > 
> > Let's say '.' was used to spell "parent module", and let's assume that 
> > the module 'a.b.c.d' wants to import 'a.b.e'.  The absolute import would 
> > be spelled:
> > 
> >     import a.b.e
> > 
> > ... and the relative import would be spelled:
> > 
> >     import .....e # .[parent].[parent].e
> > 
> > Yuck! (no offense :)
> 
> Truly, yuck.  But in my model, the leading '.' dot, itself, stands for
> the containing package, and '..' stands for the containing package's
> package, and so forth:
> 
>   import ..e   #  [parent-of-parent].e

I can't quite get used to the idea of '.' having two different meanings
depending on how many '.'s are found next to each other in an import
statement.  I believe that the notation above _is_ concise, but _is not_
very intuitive ...

> Even using the leading '.' syntax, it would be good to have a specific
> identifier for the containing package, realized in each module and
> respected as a special identifier by the package machinery.  I like
> '__pkg__':
> 
>   import __pkg__.sibling                # == 'import .sibling'
> 
> and
> 
>   import __pkg__.__pkg__.uncle          # == 'import ..uncle'
>   import __pkg__.__pkg__.uncle.cousin   # == 'import ..uncle.cousin'

... while the notation here _is_ intuitive (to a python programmer), but
_is not_ concise.  I still favor this syntax to the former syntax.

I like '__pkg__' better than my initial suggestion ('__parent__').  It's
more aesthetically pleasing. :)

-- 
Devin
devin at whitebread.org
http://www.whitebread.org/




More information about the Python-Dev mailing list