And now Lisp bites me, because '::a' means ...

And a single colon also means something else in Lisp.
Does it matter much what that notation means in a different language?
Python will struggle to evolve if it can't conflict with other languages.

I myself am rarely annoyed by this issue, with
the single exception of "self.foo = foo" in __init__() defs (which
can't be handled by these notations).

It can be handled:

```
self.__dict__.update(**, foo, bar, spam)
```

or

```
self.__dict__.update({::foo, ::bar, ::spam})
```

Alternatively, this is a utility function that I use sometimes:

```
def setattrs(obj, **kwargs):
    """
    >>> data = SimpleNamespace()
    >>> setattrs(data, a=1, b=2)  # doctest:+ELLIPSIS
    namespace(a=1, b=2)
    """
    for key, value in kwargs.items():
        setattr(obj, key, value)
    return obj
```

And here is some actual code of mine using it:

```
    setattrs(cls,
             text=text,
             program=program,
             messages=messages,
             hints=hints)
```

which could instead be written

```
setattrs(cls, **, text, program, messages, hints)
```