[Python-Dev] Early PEP draft (For Python 3000?)

Jim Jewett jimjjewett at gmail.com
Thu Oct 20 15:48:06 CEST 2005


I'll try to be more explicit; if Josiah and I are talking past each
other, than the explanation was clearly not yet mature.

(In http://mail.python.org/pipermail/python-dev/2005-October/057251.html)
Eyal Lotem suggested:

> Name: Attribute access for all namespaces ...

>       global x ; x = 1
> Replaced by:
>       module.x = 1

I responded:
> Attribute access as an option would be nice, but might be slower.

> Also note that one common use for a __dict__ is that you don't
> know what keys are available; meeting this use case with
> attribute access would require some extra machinery, such as
> an iterator over attributes.

Josiah Carlson responded
(http://mail.python.org/pipermail/python-dev/2005-October/057451.html)

> This particular use case is easily handled.  Put the following
> once at the top of the module...

> module = __import__(__name__)

> Then one can access (though perhaps not quickly) the module-level
> variables for that module.  To access attributes, it is a quick scan
> through module.__dict__, dir(), or vars().

My understanding of the request was that all namespaces --
including those returned by globals() and locals() -- should
be used with attribute access *instead* of __dict__ access.

module.x is certainly nicer than module.__dict__['x']

Even with globals() and locals(), I usually *wish* I could
use attribute access, to avoid creating a string when what
I really want is a name.

The catch is that sometimes I don't know the names in
advance, and have to iterate over the dict -- as you
suggested.  That works fine today; my question is what
to do instead if __dict__ is unavailable.

Note that vars(obj) itself conceptually returns a NameSpace
rather than a dict, so that isn't the answer.

My inclination is to add an __iterattr__ that returns
(attribute name, attribute value) pairs, and to make this the
default iterator for NameSpace objects.

Whether the good of
  (1)  not needing to mess with __dict__, and
  (2)  not needing to pretend that strings are names
is enough to justify an extra magic method ... I'm not as sure.

-jJ


More information about the Python-Dev mailing list