On 05/24/2017 07:31 AM, Steve D'Aprano wrote:
On Wed, 24 May 2017 10:07 pm, Chris Angelico wrote:
On Wed, May 24, 2017 at 7:10 PM, Steve D'Aprano wrote:
Although I wonder:
- maybe the enumeration (the class ContentTypes) could have a nicer repr
than
<enum 'ContentTypes'>
- maybe you could add functionality to freeze the enumeration so that new
members cannot be added?
I'm sure it could be done. But would it really benefit anyone
anything? Java has "final" classes, which can't be subclassed; and I
haven't heard many people saying "I wish you would declare more of
your classes final" or "I wish Python let you declare a class as
final".
Same as if Python supported constants (names that can only be assigned to
once). Again, the pain of building a custom "constant-like" solution is
greater than the benefit, so I've done without.
Check out the NamedConstant class from aenum [1] -- it's probably as close as
you're going to get:
>>> from aenum import NamedConstant
>>> class Konstant(NamedConstant):
... PI = 3.14159
... TAU = 2 * PI
>>> Konstant.PI
<Konstant.PI: 3.14159>
>> print(Konstant.PI)
3.14159
>>> Konstant.PI = 'apple'
Traceback (most recent call last):
...
AttributeError: cannot rebind constant <Konstant.PI>
>>> del Konstant.PI
Traceback (most recent call last):
...
AttributeError: cannot delete constant <Konstant.PI>
Neither view is entirely right or wrong, which is why there will always be
arguments over it. But I'll note that Python has supported read-only
properties for, oh, a decade or more, and do I hear people complaining
about how much libraries and applications over-use and abuse properties?
Not very often.
But getting around a Python-code read-only property is trivial -- not pretty,
but trivial.
--
~Ethan~
[1] https://pypi.python.org/pypi/aenum
--
https://mail.python.org/mailman/listinfo/python-list