[Python-Dev] Namespaces

Aahz aahz@pythoncraft.com
Mon, 1 Apr 2002 13:56:57 -0500

On Mon, Apr 01, 2002, Martin v. Loewis wrote:
> Aahz <aahz@pythoncraft.com> writes:
>> Well, no.  First-level names, yes, but each object itself is a
>> namespace, so every name will be bound to an object that can contain
>> names.  To use my favorite example:
>>     def f():
>>         pass
>>     f.permissions = 'author'
> Except that those are not names, they are attributes.  Namespaces
> nest, in Python; permissions does not live in namespace, which becomes
> obvious if you try to nest it
> def f():
>     return permissions
> f.permissions = 'author'
> print f()
> Traceback (most recent call last):
>   File "a.py", line 5, in ?
>     print f()
>   File "a.py", line 2, in f
>     return permissions
> NameError: global name 'permissions' is not defined

You're only correct if you define namespaces as being the set of nested
first-level lookups.  If you define "attribute" as "name bound to an
object namespace", then we're pretty much in agreement.  We certainly
talk often enough of module namespaces; I think it makes sense to expand
that usage to all objects.

It seems pretty clear to me that f.permissions does not live in the
local/global/builtins namespace, but it sure lives in f's namespace.
Because attributes are names like any other name and can be bound to any
Python object, I think it lends crucial orthogonality to say that
attributes live in object namespace.
Aahz (aahz@pythoncraft.com)           <*>         http://www.pythoncraft.com/

Why is this newsgroup different from all other newsgroups?