Message197717
OK, rechecking PEP 435, I see that disallowing reuse of a name was indeed explicitly accepted as part of the defined API: http://www.python.org/dev/peps/pep-0435/#duplicating-enum-members-and-values
In that case, I switch my perspective to agree with Ethan that overwriting it with a method or descriptor should *also* be disallowed. The PEP is currently silent on that question, and as Ethan notes in the original post, the weird middle ground of the current behaviour is thoroughly confusing:
>>> class Disallowed(Enum):
... a = 1
... a = 2
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in Disallowed
File "/home/ncoghlan/devel/py3k/Lib/enum.py", line 87, in __setitem__
raise TypeError('Attempted to reuse key: %r' % key)
TypeError: Attempted to reuse key: 'a'
>>> class Allowed(Enum):
... a = 1
... @property
... def a(self):
... return 2
...
>>> Allowed.a
<property object at 0x7f3d65da14d8>
>>> Allowed().a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __call__() missing 1 required positional argument: 'value'
>>> Allowed(1).a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/ncoghlan/devel/py3k/Lib/enum.py", line 218, in __call__
return cls.__new__(cls, value)
File "/home/ncoghlan/devel/py3k/Lib/enum.py", line 439, in __new__
raise ValueError("%s is not a valid %s" % (value, cls.__name__))
ValueError: 1 is not a valid Allowed
>>> Allowed('a').a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/ncoghlan/devel/py3k/Lib/enum.py", line 218, in __call__
return cls.__new__(cls, value)
File "/home/ncoghlan/devel/py3k/Lib/enum.py", line 439, in __new__
raise ValueError("%s is not a valid %s" % (value, cls.__name__))
ValueError: a is not a valid Allowed
>>> Allowed['a'].a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/ncoghlan/devel/py3k/Lib/enum.py", line 255, in __getitem__
return cls._member_map_[name]
KeyError: 'a' |
|
Date |
User |
Action |
Args |
2013-09-14 16:17:37 | ncoghlan | set | recipients:
+ ncoghlan, barry, georg.brandl, pitrou, r.david.murray, eli.bendersky, ethan.furman, eric.snow |
2013-09-14 16:17:37 | ncoghlan | set | messageid: <1379175457.54.0.358795821084.issue18989@psf.upfronthosting.co.za> |
2013-09-14 16:17:37 | ncoghlan | link | issue18989 messages |
2013-09-14 16:17:36 | ncoghlan | create | |
|