枚举:设置成员值等于他们的名字,不好的做法?

Enums: set members values equal to their names, bad practice?

因为可以创建任何数据类型的 Enum 成员值:Creating an Enum

Note: Enum member values
Member values can be anything: int, str, etc.. If the exact value is unimportant you may use auto instances and an appropriate value will be chosen for you. Care must be taken if you mix auto with other values.

有时,我会看到 str 类型的重复成员值:

from enum import Enum

class Color(Enum):
    RED = "RED"
    GREEN = "GREEN"
    BLUE = "BLUE"

是否认为重复具有 str 类型值的成员名称是一种不好的做法?

如果枚举中的值不重要,那么值的类型也不重要——它可以是任何你想要的。

就易用性而言,键入 auto() 可能更容易。

我也这么认为。您首先要使用 Enum 的原因是您无法“意外地”比较它。如果您将成员值设置为 "RED",那么我认为如果您比较 Color.RED == "RED",您会不小心 return True。这基本上首先违背了 Enum 的目的(例如,为什么不总是使用字符串 'RED''BLUE' 等)

如果您想要 Enum 打印代表字符串,只需覆盖 ___str___ 即可:

def __str__(self):
    return self.name