Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I properly document python enum elements? [duplicate]

I understand that I can add a Python docstring to an enum type as I would any other class. But how do I add documentation to an element of that type?

As far as I can see there are three possibilities:

class MyEnum(Enum):
    """
    This is my enum type.
    """

    """
    Variant 1
    """
    a = 0,  
    b = 1, # variant 2
    c = 2, """ variant 3 """

But none of them really work consistently. If I call print(inspect.getdoc(MyEnum.a)) in any of the variants, the docstring of the MyEnum type is returned ('This is my enum type'). Pycharm can show variant 3 in its Quick Documentation preview, but includes the quotes and longer comments that exceed the column wrap will not be shown correctly.

Is there a preferred way or convention on how to document Python enum elements?

like image 921
thrau Avatar asked Aug 28 '18 16:08

thrau


People also ask

Can enum have two same values python?

By definition, the enumeration member values are unique. However, you can create different member names with the same values.

How do you declare an enum in Python?

Enum is a class in python for creating enumerations, which are a set of symbolic names (members) bound to unique, constant values. The members of an enumeration can be compared by these symbolic anmes, and the enumeration itself can be iterated over. An enum has the following characteristics.

What is Auto in enum Python?

Syntax : enum.auto() Automatically assign the integer value to the values of enum class attributes. Example #1 : In this example we can see that by using enum. auto() method, we are able to assign the numerical values automatically to the class attributes by using this method.

Should enums be capitalized Python?

By convention, enumeration names begin with an uppercase letter and are singular. The enum module is used for creating enumerations in Python.


1 Answers

If the values themselves are not important, see How do I put docstrings on Enums?. If the values are important you can either customize that answer or use the aenum1 library:

from aenum import Enum

class MyEnum(Enum):
    _init_ = 'value __doc__'
    a = 0, 'docstring for a'
    b = 1, 'another for b'
    c = 2, 'and one for c as well'

which results in:

>>> MyEnum.b.value
1
>>> MyEnum.b.__doc__
'another for b'

However, I do not know which, if any, IDEs support using Enum member doc strings.


1 Disclosure: I am the author of the Python stdlib Enum, the enum34 backport, and the Advanced Enumeration (aenum) library.

like image 119
Ethan Furman Avatar answered Sep 28 '22 16:09

Ethan Furman