Close 25594: advise against accessing Enum members from other members

This commit is contained in:
Ethan Furman 2015-11-20 13:12:26 -08:00
parent 5444de93ac
commit 748dad5b6a
1 changed files with 15 additions and 9 deletions

View File

@ -730,18 +730,24 @@ member instances.
Finer Points Finer Points
^^^^^^^^^^^^ ^^^^^^^^^^^^
Enum members are instances of an Enum class, and even though they are :class:`Enum` members are instances of an :class:`Enum` class, and even
accessible as `EnumClass.member`, they are not accessible directly from though they are accessible as `EnumClass.member`, they should not be accessed
the member:: directly from the member as that lookup may fail or, worse, return something
besides the :class:`Enum` member you looking for::
>>> Color.red >>> class FieldTypes(Enum):
<Color.red: 1> ... name = 0
>>> Color.red.blue ... value = 1
Traceback (most recent call last): ... size = 2
... ...
AttributeError: 'Color' object has no attribute 'blue' >>> FieldTypes.value.size
<FieldTypes.size: 2>
>>> FieldTypes.size.value
2
Likewise, the :attr:`__members__` is only available on the class. .. versionchanged:: 3.5
The :attr:`__members__` attribute is only available on the class.
If you give your :class:`Enum` subclass extra methods, like the `Planet`_ If you give your :class:`Enum` subclass extra methods, like the `Planet`_
class above, those methods will show up in a :func:`dir` of the member, class above, those methods will show up in a :func:`dir` of the member,