Dunder variables
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Tue Jan 9 18:34:08 EST 2018
On Tue, 09 Jan 2018 16:14:27 +0200, Frank Millman wrote:
> Maybe I was not clear. The Context instance is passed as an argument to
> many methods. The methods can access the attributes of the instance. The
> instance has no methods of its own.
Ah, I see, I misunderstood.
[...]
>> Alternatively, use a SimpleNamespace:
>
> I did play with that for a while, but AFAIK it does not allow you to
> define read-only attributes.
Not directly, no, but you can subclass:
py> class Spam(SimpleNamespace):
... @property
... def eggs(self):
... return "foo"
...
py> bag = Spam()
py> bag.eggs
'foo'
py> bag.eggs = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
However, at the point you are subclassing and adding multiple properties,
I'm not sure there's any advantage over just defining a class from
scratch. While it is true that SimpleNamespace gives you a nice repr, the
properties don't show up in that repr, and I assume it is those read-only
attributes that you most care about.
--
Steve
More information about the Python-list
mailing list