The first example in the doc lays out the difference:

Assignments within the namespace block have this special behaviour whereby the assigned-to name is changed to be:
‘<namespace name>.<assignment name>’
And the assignment is made in the ‘parent scope’ of the namespace.

I.e. (again, as described in the doc):

class A:
    Namespace B:
        C = 1

Results in:

A.__dict__ == {‘B.C’: 1, ‘B’: <namespace proxy>}

Note the ‘B.C’ entry

Now for me, the only place where is starts to be interesting is with methods within namespaces, where the ‘self’ binding is made against to top-level class, and not against the namespace.  This does make for some nicer nested API definitions (a-la pandas methods) where an intermediate name os used just to group and organise methods.

On Mon, 3 May 2021 at 19:40, David Mertz <> wrote:
On Mon, May 3, 2021 at 6:37 PM Stestagg <> wrote:
On Mon, 3 May 2021 at 19:24, David Mertz <> wrote:
So yes... as I thought, SimpleNamespace does EVERYTHING described by the proposal, just without needing more keywords:

Except that the code and description of the proposal explicitly outline behaviours that SimpleNamespace does not provide (and aren’t trivially possible to add)

I've looked and been unable to find an example of that. Can you show one?

The dead increasingly dominate and strangle both the living and the
not-yet born.  Vampiric capital and undead corporate persons abuse
the lives and control the thoughts of homo faber. Ideas, once born,
become abortifacients against new conceptions.