Issue 34487: enum sunder names mix metaclass and enum class attributes (original) (raw)
In the enum
module documentation, some of the _sunder_
names are on EnumMeta
, whereas others are on the produced Enum
class:
8.13.15.3.2. Supported
_sunder_
names
_name_
– name of the member_value_
– value of the member; can be set / modified in new_missing_
– a lookup function used when a value is not found; may be overridden_ignore_
– a list of names, either as a list() or a str(), that will not be transformed into members, and will be removed from the final class_order_
– used in Python 2/3 code to ensure member order is consistent (class attribute, removed during class creation)_generate_next_value_
– used by the Functional API and by auto to get an appropriate value for an enum member; may be overridden
Experimentally, it appears _name_
and _value_
are on the Enum
class, whereas the others are all on the EnumMeta
class:
In [272]: class Test(enum.Enum): a = 0
In [273]: Test.a.name Out[273]: 'a'
In [274]: Test._name
AttributeError Traceback (most recent call last) in () ----> 1 Test._name
/group_workspaces/cems2/fiduceo/Users/gholl/anaconda3/envs/FCDR37a/lib/python3.7/enum.py in getattr(cls, name) 344 return cls.member_map[name] 345 except KeyError: --> 346 raise AttributeError(name) from None 347 348 def getitem(cls, name):
AttributeError: _name
In [275]: Test.a.value Out[275]: 0
In [276]: Test._value
AttributeError Traceback (most recent call last) in () ----> 1 Test._value
/group_workspaces/cems2/fiduceo/Users/gholl/anaconda3/envs/FCDR37a/lib/python3.7/enum.py in getattr(cls, name) 344 return cls.member_map[name] 345 except KeyError: --> 346 raise AttributeError(name) from None 347 348 def getitem(cls, name):
AttributeError: _value
In [277]: Test.a.missing Out[277]: <bound method Enum._missing_ of <enum 'Test'>>
In [278]: Test.missing Out[278]: <bound method Enum._missing_ of <enum 'Test'>>
This is not clear from the documentation.