[Python-Dev] Re: PEP 328 -- relative and multi-line import
Aahz
aahz at pythoncraft.com
Mon Apr 5 15:01:51 EDT 2004
On Mon, Apr 05, 2004, Neil Schemenauer wrote:
> On Mon, Apr 05, 2004 at 01:36:24PM -0400, Aahz wrote:
>>
>> Your intuition is wrong. From package's __init__.py, ``from .`` refers
>> to package's parent; to get back into the package, you need to use
>> ``from .package``.
>
> That's confusing. I expected '.' to refer to the current package,
> just as '.' refers to the current directory in most file systems. I
> think that meaning would be more useful in practice as well.
> Imagine a package where '.' means the current package:
>
> # __init__.py ###################################
> from .a import A
> from .b import B
> #################################################
>
> # a.py ##########################################
> from .utils import x, y
> class A:
> ...
> #################################################
>
> # b.py ##########################################
> from .utils import x, z
> class B:
> ...
> #################################################
>
> # utils.py ######################################
> def x():
> ...
> def y():
> ...
> def z():
> ...
> #################################################
>
> Notice that the modules that make up the package do not need to know
> what the package is called. That was one of the major benefits of
> relative imports that I was looking forward to.
>
> Perhaps I misunderstand the PEP.
Not sure. The only difference between your semantics and mine lies in
__init__.py; there -- and only there -- is where the need exists to know
the package name. You're making the mistake of thinking that
__init__.py exists in the same namespace as a.py, b.py, and utils.py --
it doesn't. Now, we could in theory use your semantics due to
"practicality beats purity", but it seems to me that it would lead to
more mistakes in understanding how packages work.
--
Aahz (aahz at pythoncraft.com) <*> http://www.pythoncraft.com/
Why is this newsgroup different from all other newsgroups?
More information about the Python-Dev
mailing list