Python 2.7,枚举属性的enum34和用户友好的unicode表示

Python 2.7, enum34 and user friendly unicode representation of enum properties

我在 Python 2.7 中使用 enum34 将不同的选项写入数据库(使用 Flask 和 Flask-Admin),枚举如下所示:

class Veggie(enum.Enum):
    celery = 1
    tomato = 2
    broccoli = 3

然后我按如下方式使用它来分配值作为选项:

my_veggie = Veggie.celery

我正在使用整数,因为这是我希望它作为整数存储在数据库中的方式。

然而,当我将其输出给最终用户时,unicode(Veggie.celery) 将给出以下字符串:Veggie.celery,但我希望将其作为用户使用友好的字符串,例如 "Veggie: Celery"、"Veggie: Tomato" 等......我显然可以操纵 unicode() 返回的字符串,但我怀疑应该有一种更简单、更简洁的方法来做到这一点使用 class 方法或使用枚举内置的方法?

谢谢,

如果您想更改 Enum class 的字符串输出,只需添加您自己的 __str__ 方法:

class Veggie(Enum):
    celery = 1
    tomato = 2
    broccoli = 3
    def __str__(self):
       return self.__class__.__name__ + ': ' + self.name

>>> Veggie.tomato
<Veggie.tomato: 2>
>>> print Veggie.tomato
Veggie: tomato

如果你经常这样做,创建你自己的基地class:

class PrettyEnum(Enum):
    def __str__(self):
       return self.__class__.__name__ + ': ' + self.name

并从中继承:

class Veggie(PrettyEnum):
    celery = 1
    tomato = 2
    broccoli = 3