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
我在 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