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

时间:2016-04-06 17:52:55

标签: python-2.7 enums python-unicode

我在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()返回的字符串,但我怀疑应该有一种更容易,更清晰的方法来使用类方法或其他东西内置enum?

谢谢,

1 个答案:

答案 0 :(得分:0)

如果您想更改Enum课程的字符串输出,只需添加自己的__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 PrettyEnum(Enum):
    def __str__(self):
       return self.__class__.__name__ + ': ' + self.name

并从中继承:

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