embarrassing class question

Brendan brendandetracey at yahoo.com
Thu Oct 21 15:12:34 EDT 2010


On Oct 21, 3:56 pm, Ethan Furman <et... at stoneleaf.us> wrote:
> Jonas H. wrote:
> > On 10/21/2010 08:09 PM, Brendan wrote:
> >> Two modules:
> >> x.py:
> >> class x(object):
> >>      pass
>
> >> y.py:
> >> from x import x
> >> class y(x):
> >>      pass
>
> >> Now from the python command line:
> >>>>> import y
> >>>>> dir(y)
> >> ['__builtins__', '__doc__', '__file__', '__name__', '__package__',
> >> 'x', 'y']
>
> >> I do not understand why class 'x' shows up here.
>
> > Because that's how `import` behaves. It imports *every* member of the
> > module into the importing module's global namespace (except for
> > attributes that start with an underscore).
>
> Um, no.  (unless you do "from <whatever> import *" at the module level)
>
> What it does is add whatever you imported into the namespace where you
> imported it.
>
> Because y.py has "from x import x" the x class from x.py is added to the
> y.py namespace.
>
> ~Ethan~- Hide quoted text -
>
> - Show quoted text -

So what is usually done to prevent this? (In my case not wanting class
x added to the y.py namespace)
It seems sloppy.



More information about the Python-list mailing list